home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / inter33b.zip / INTERRUP.F < prev    next >
Text File  |  1993-01-03  |  268KB  |  7,155 lines

  1. Interrupt List, part 6 of 8
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. ----------2FC0-------------------------------
  4. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - API
  5.     AH = C0h
  6.     AL = function code (01h to 15h)
  7. Return: ???
  8. SeeAlso: AX=C000h"MTEZ",AX=CB00h"MTEZ"
  9. ----------2FC000-----------------------------
  10. INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK
  11.     AX = C000h
  12. Return: AL = FFh
  13.     ES:BX -> FAR entry point
  14.     ES:SI -> signature string "LINKSUP$"
  15. Note:    LSL.COM may use any multiplex number between C0h and FFh; it searches
  16.       for itself in that range, and installs using the first free multiplex
  17.       number in the range if not already loaded.
  18.  
  19. Call entry point with:
  20.     BX = 0002h get entry points
  21.         ES:SI -> buffer for entry point record (see below)
  22.         Return: ES:SI buffer filled
  23.  
  24. Format of entry point record:
  25. Offset    Size    Description
  26.  00h    DWORD    pointer to ??? entry point in LSL
  27.  04h    DWORD    pointer to ??? entry point in LSL
  28. ----------2FC000-----------------------------
  29. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - INSTALLATION CHECK
  30.     AX = C000h
  31.     BX = 444Bh
  32.     CX = 4A4Eh
  33. Return: AL = status
  34.         00h not installed, OK to install
  35.         FFh installed
  36.         BX = 646Bh
  37.         CX = 6A6Eh
  38. Note:    this TSR will use any free multiplex number from C0h to FFh
  39. SeeAlso: AH=C0h"MTEZ"
  40. ----------2FC000-----------------------------
  41. INT 2F - AD-DOS - INSTALLATION CHECK
  42.     AX = C000h
  43. Return: AL = FFh if installed
  44.         BX = 4144h ('AD')
  45.         CX = 2D44h ('-D')
  46.         DX = 4F53h ('OS')
  47. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  48.       MS Windows
  49. Note:    AH=C0h is the default multiplex number; if this is already in use,
  50.       After Dark will try successive values up to AH=FFh
  51. SeeAlso: AX=C001h,AX=C003h,AX=C005h,AX=C007h,AX=C009h,AX=C020h
  52. ----------2FC001ES0000-----------------------
  53. INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT
  54.     AX = C001h
  55.     ES = 0000h
  56. Return: AL = 00h if successful
  57.         ES = AD-DOS TSR Code Segment
  58. SeeAlso: AX=C000h"AD-DOS"
  59. ----------2FC002-----------------------------
  60. INT 2F - AD-DOS - CHECK FOR NEW INPUT
  61.     AX = C002h
  62. Return: AL = 00h if succesful
  63.         BX = status
  64.         0000h no input since last check
  65.         0001h new input available
  66. Note:    this call also resets the new-input flag
  67. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  68. ----------2FC003-----------------------------
  69. INT 2F - AD-DOS - SET MINUTES TO WAIT
  70.     AX = C003h
  71.     BX = minutes to wait before blanking screen
  72. Return: AL = 00h if successful
  73. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  74.       MS Windows
  75. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  76.       After Dark will try successive values up to AH=FFh
  77.     this call also resets the delay timer
  78. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  79. ----------2FC004-----------------------------
  80. INT 2F - AD-DOS - GET MINUTES TO WAIT
  81.     AX = C004h
  82. Return: AL = 00h if succesful
  83.         BX = minutes to wait before blanking screen
  84. SeeAlso: AX=C000h"AD-DOS",AX=C003h
  85. ----------2FC005-----------------------------
  86. INT 2F - AD-DOS - SET BLANKER STATUS
  87.     AX = C005h
  88.     BX = new state (0000h inactive, 0001h active) (default 0001h)
  89. Return: AL = 00h if successful
  90. SeeAlso: AX=C006h
  91. ----------2F0C06-----------------------------
  92. INT 2F - AD-DOS - GET BLANKER STATUS
  93.     AX = C006h
  94. Return: AL = 00h if successful
  95.         BX = current state of screen blanker (0000h inactive, 0001h active)
  96. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  97.       MS Windows
  98. Note:    AH=C0h is the default multiplex number; if this is already in use,
  99.       After Dark will try successive values up to AH=FFh
  100. SeeAlso: AX=C000h"AD-DOS",AX=C005h
  101. ----------2F0C07-----------------------------
  102. INT 2F - AD-DOS - SET HOT KEY
  103.     AX = C007h
  104.     BX = hot key
  105.     CL = hot key shift status
  106. Return: AL = 00h if successful
  107. SeeAlso: AX=C008h
  108. ----------2F0C08-----------------------------
  109. INT 2F - AD-DOS - GET CURRENT HOT KEY
  110.     AX = C008h
  111. Return: AX = status
  112.         0000h successful
  113.         BX = Hot Key
  114.         CL = Hot Key Shift Status
  115.         0008h otherwise
  116. SeeAlso: AX=C000h"AD-DOS",AX=C007h
  117. ----------2F0C09-----------------------------
  118. INT 2F - AD-DOS - UNBLANK MONITOR
  119.     AX = C009h
  120. Return: AL = 00h if successful
  121. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  122.       MS Windows
  123. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  124.       After Dark will try successive values up to AH=FFh
  125.     this function works by simulating keyboard activity
  126. ----------2F0C0A-----------------------------
  127. INT 2F - AD-DOS - ???
  128.     AX = C00Ah
  129. Return: AX = status
  130.         0000h successful
  131.         BH = ??
  132.         BL = ??
  133.         000Ah failed
  134. ----------2F0C0B-----------------------------
  135. INT 2F - AD-DOS - ???
  136.     AX = C00Bh
  137. Return: AX = status 
  138.         0000h successful
  139.         000Bh failed
  140. ----------2F0C0C-----------------------------
  141. INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h
  142.     AX = C00Ch
  143. Return: AX = status
  144.         0000h successful
  145.         000Ch failed
  146. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  147.       MS Windows
  148. Note:    AH=C0h is the default multiplex number; if this is already in use,
  149.       After Dark will try successive values up to AH=FFh
  150. ----------2F0C0E-----------------------------
  151. INT 2F - AD-DOS - SET PASSWORD STATUS
  152.     AX = C00Eh
  153.     BX = new state (0000h disabled, 0001h enabled)
  154. Return: ???
  155. SeeAlso: AX=C000h"AD-DOS",AX=C00Fh
  156. ----------2F0C0F-----------------------------
  157. INT 2F - AD-DOS - GET PASSWORD STATUS
  158.     AX = C00Fh
  159. Return: BX = current state (0000h disabled, 0001h enabled)
  160. SeeAlso: AX=C00Eh
  161. ----------2F0C20-----------------------------
  162. INT 2F - AD-DOS - GET AND RESET VxD API STATUS
  163.     AX = C020h
  164. Return: AL = 00h if successful
  165.         BX = VxD API Status
  166.         0000h no error
  167.         0001h error
  168.         0100h neither Windows 3.X enhanced mode nor
  169.             Windows/386 2.x is running
  170.         0200h VM API entry point not found (VxD not installed)
  171. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  172.       After Dark will try successive values up to AH=FFh
  173.     this call resets the VxD API Status to zero
  174. SeeAlso: AX=1602h,AX=1607h
  175. ----------2FC050-----------------------------
  176. INT 2F U - Explosiv 2.00 - INSTALLATION CHECK
  177.     AX = C050h
  178. Return: AL = 51h if installed
  179. Notes:    Explosiv is a shareware animated screen blanker for DOS and Windows 3
  180.       by Reidar Gresseth and Chris Hook
  181.     AH=C0h is the default multiplex number, but may be reconfigured to
  182.       any value from C0h to C9h
  183. SeeAlso: AX=C052h
  184. ----------2FC052-----------------------------
  185. INT 2F U - Explosiv 2.00 - UNINSTALL
  186.     AX = C052h
  187.     DX:BX = address to return to on successful uninstall
  188. Return: at specified address if successful
  189.     AL = 53h on error
  190. Note:    specified return address must have the segment of the caller's PSP
  191. SeeAlso: AX=C050h
  192. ----------2FC054-----------------------------
  193. INT 2F U - Explosiv 2.00 - GET ???
  194.     AX = C054h
  195. Return: AL = ???
  196. Note:    returns value set by AX=C057h
  197. SeeAlso: AX=C057h
  198. ----------2FC055-----------------------------
  199. INT 2F U - Explosiv 2.00 - SET BLANKING INTERVAL
  200.     AX = C055h
  201.     BX = new interval in clock ticks
  202. ----------2FC056-----------------------------
  203. INT 2F U - Explosiv 2.00 - SET ???
  204.     AX = C056h
  205.     BL = ???
  206. ----------2FC057-----------------------------
  207. INT 2F U - Explosiv 2.00 - SET ???
  208.     AX = C057h
  209.     BL = ???
  210. SeeAlso: AX=C054h
  211. ----------2FC058-----------------------------
  212. INT 2F U - Explosiv 2.00 - SET ???
  213.     AX = C058h
  214.     BL = ???
  215. ----------2FC059-----------------------------
  216. INT 2F U - Explosiv 2.00 - CLEAR ???
  217.     AX = C059h
  218. Note:    clears flag set by AX=C05Ah
  219. SeeAlso: AX=C05Ah
  220. ----------2FC05A-----------------------------
  221. INT 2F U - Explosiv 2.00 - SET ???
  222.     AX = C05Ah
  223.     BL = ???
  224. Note:    sets flag cleared by AX=C059h then stores BL
  225. SeeAlso: AX=C059h,AX=C05Bh
  226. ----------2FC05B-----------------------------
  227. INT 2F U - Explosiv 2.00 - SET ???
  228.     AX = C05Bh
  229.     BL = ???
  230. SeeAlso: AX=C05Ah,AX=C05Ch
  231. ----------2FC05C-----------------------------
  232. INT 2F U - Explosiv 2.00 - SET ???
  233.     AX = C05Ch
  234.     BL = ???
  235. SeeAlso: AX=C05Bh
  236. ----------2FC900BP0000-----------------------
  237. INT 2F U - ThunderByte??? - INSTALLATION CHECK
  238.     AX = C900h
  239.     BP = 0000h
  240. Return: AL = FFh if installed
  241.         BP >= 0014h
  242. Note:    called by TBSCANX
  243. SeeAlso: AX=C987h,AX=CA00h
  244. ----------2FC987-----------------------------
  245. INT 2F U - ThunderByte??? - DISINFECT FILE???
  246.     AX = C987h
  247.     BX:DX -> filename
  248.     BX:CX -> virus name
  249. Return: AX = status
  250.         0000h successful???
  251. Note:    called by TBSCANX
  252. SeeAlso: AX=CA00h
  253. ----------2FC9FF-----------------------------
  254. INT 2F C - STACKMAN - INSTALLATION BROADCAST
  255.     AX = C9FFh
  256.     BL = BCD version number
  257.     CX = number of stacks
  258.     DX = stack size in bytes
  259. Notes:    called by STACKMAN when it goes resident to inform interested TSRs that
  260.       its API is available
  261.     the installation check consists of testing for the string "STACKXXX" at
  262.       offset 0Ah from the INT B4 handler
  263. SeeAlso: INT B4"STACKMAN",INT B5"STACKMAN"
  264. ----------2FCA00BX5442-----------------------
  265. INT 2F - TBSCANX - INSTALLATION CHECK
  266.     AX = CA00h
  267.     BX = 5442h ('TB')
  268. Return:    AL = 00h not installed
  269.        = FFh installed
  270.         BX = 7462h ('tb') if BX was 5442h on entry
  271. Note:    TBSCANX is a resident virus scanning module by Frans Veldman.  Programs
  272.       may perform virus checks on themselves, other program files, or their
  273.       data files by invoking the TBSCANX API.
  274. SeeAlso: AX=4653h,AX=C900h
  275. ----------2FCA01-----------------------------
  276. INT 2F - TBSCANX - GET STATUS
  277.     AX = CA01h
  278. Return: AH = BCD version number (v2.2+)
  279.        = CAh for versions before 2.2
  280.     AL = state (00h = disabled, 01h = enabled)
  281.     CX = number of signatures which will be searched
  282. ---v2.0---
  283.     BX = EMS handle, 0000h if not using EMS
  284. ---v2.3+---
  285.     BX = segment of swap area, 0000h if not swapped
  286.     DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS
  287. SeeAlso: AX=CA02h
  288. ----------2FCA02-----------------------------
  289. INT 2F - TBSCANX - SET STATE
  290.     AX = CA02h
  291.     BL = new state (00h = disabled, 01h = enabled)
  292. SeeAlso: AX=CA01h
  293. ----------2FCA03-----------------------------
  294. INT 2F - TBSCANX - SCAN BUFFER
  295.     AX = CA03h
  296.     CX = size of buffer
  297.     DS:DX -> buffer containing data to scan
  298. Return: CF clear if no virus signatures found
  299.         BX,ES destroyed
  300.     CF set if signature found
  301.         ES:BX -> ASCIZ virus name (v2.3+)
  302.         DS:DX -> ASCIZ virus name (v2.0)
  303.     AX,CX,DX destroyed (v2.3+)
  304.     all other registers except CS:IP and SS:SP destroyed (v2.0)
  305. SeeAlso: AX=CA04h
  306. ----------2FCA04-----------------------------
  307. INT 2F - TBSCANX - SCAN FILE
  308.     AX = CA04h
  309.     DS:DX -> filename
  310. Return: CF clear if no virus signatures found
  311.         BX,ES destroyed
  312.     CF set if signature found
  313.         ES:BX -> ASCIZ virus name
  314.     AX,CX,DX destroyed
  315. Note:    this function requires at least 4K free memory
  316. SeeAlso: AX=CA03h
  317. ----------2FCAFEBX0000-----------------------
  318. INT 2F U - THELP v3.0 - INSTALLATION CHECK
  319.     AX = CAFEh
  320.     BX = 0000h
  321. Return: BX = segment of resident code if installed
  322.        = 0000h if not installed
  323. SeeAlso: AX=5453h
  324. ----------2FCB00-----------------------------
  325. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  326.     AX = CB00h
  327. Return: AL = status
  328.         00h not installed, OK to install
  329.         01h not installed, not OK to install
  330.         FFh installed
  331. Note:    AH = CBh is the default identifier, but may be reconfigured
  332. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  333. ----------2FCB00BX4D53-----------------------
  334. INT 2F - MTEZ XpressFax CASMGR - INSTALLATION CHECK
  335.     AX = CB00h
  336.     BX = 4D53h
  337.     CX = 4949h
  338. Return: AL = status
  339.         00h not installed, OK to install
  340.         01h not installed, not OK to install
  341.         FFh installed
  342.         BX = 6D73h
  343.         CX = 6969h
  344. Note:    this function is equivalent to the standard CASMGR installation check,
  345.       but uses the additional magic values to identify which CAS is
  346.       installed
  347. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB0Eh,AX=CB16h
  348. ----------2FCB01-----------------------------
  349. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  350.     AX = CB01h
  351.     DS:DX -> ASCIZ name of task control file
  352. Return: AX >= 0: event handle
  353.        < 0: error code
  354. Note:    files needed for an event must be kept until task is complete or error
  355. SeeAlso: AX=CB0Bh,AX=CB15h
  356.  
  357. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  358.   Class 00h    --- FAX warnings
  359.     Subcode 00h    no error
  360.         02h    bad scanline count
  361.         03h    page sent with errors, could not retransmit
  362.         04h    received data lost
  363.         05h    invalid or missing logo file
  364.         06h    filename does not match nonstandard format (NSF) header
  365.         07h    file size does not match NSF header
  366.   Class 01h    --- DOS warnings (data was sent)
  367.     Subcode 01h    invalid function
  368.         05h    access denied
  369.         06h    invalid handle
  370.         others    see INT 21/AH=59h
  371.   Class 02h    --- fatal errors (data not sent)
  372.     Subcode    00h    multiplex handler failed
  373.         01h    unknown command
  374.         02h    bad event handle
  375.         03h    FIND NEXT attempted before FIND FIRST
  376.         04h    no more events
  377.         07h    invalid queue type
  378.         08h    bad control file
  379.         09h    communication board busy
  380.         0Ah    invalid command parameter
  381.         0Bh    can't uninstall resident code
  382.         0Ch    file exists
  383.         80h    unknown task type
  384.         81h    bad phone number
  385.         82h    bad .PCX file header
  386.         83h    unexpected EOF
  387.         84h    unexpected disconnect
  388.         85h    too many dialing retries
  389.         86h    no file specified for send
  390.         87h    communication board timeout
  391.         88h    received too many pages (>1023) of data
  392.         89h    manual connect initiated too long ago
  393.         8Ah    hardware command set error
  394.         8Bh    bad NonStandard Format (NSF) header file
  395.   Class 03h    --- fatal DOS errors
  396.     Subcode 02h    file not found
  397.         03h    path not found
  398.         others    see INT 21/AH=59h
  399.   Class 04h    --- FAX errors
  400.     Subcode 01h    remote unit not Group 3 compatible
  401.         02h    remote unit did not send capabilities
  402.         03h    other FAX machine incompatible
  403.         04h    other FAX incapable of file transfers
  404.         05h    exceeded retrain or FAX resend limit
  405.         06h    line noise or failure to agree on bit rate
  406.         07h    remote disconnected after receiving data
  407.         08h    no response from remote after sending data
  408.         09h    remote's capabilities incompatible
  409.         0Ah    no dial tone (v1.2+)
  410.         0Bh    invalid response from remote unit after sending data
  411.         0Dh    phone line dead or remote unit disconnected
  412.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  413.         11h    invalid command from remote after receiving data
  414.         15h    tried to receive from incompatible hardware
  415.         5Ch    received data overflowed input buffer
  416.         5Dh    remote unexpectedly stopped sending data
  417.         5Eh    other FAX machine jammed (no data sent)
  418.         5Fh    remote took too long to send fax scan line
  419.         63h    can't get through to remote unit
  420.         64h    user canceled event
  421.   Class 05h    --- application-specific (v1.2+)
  422.   ---Intel FAXPOP.EXE
  423.     Subcode 00h    tried to send while in graphics mode
  424.         01h    insufficient disk space
  425.         02h    internal buffer overflow
  426.   Class 06h    --- CAS implementation-specific (v1.2+)
  427. ----------2FCB02-----------------------------
  428. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  429.     AX = CB02h
  430. Return: AX >= 0: event handle of aborted event
  431.        < 0: error code (see AX=CB01h)
  432. Note:    termination could take up to 30 seconds
  433. SeeAlso: AX=CB08h,AX=CB10h
  434. ----------2FCB05-----------------------------
  435. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  436.     AX = CB05h
  437.     CX = status of events to find
  438.         0000h successful completion
  439.         0001h waiting to be processed
  440.         0002h number has been dialed
  441.         0003h connection established, sending
  442.         0004h connection established, receiving
  443.         0005h event aborted
  444.         FFFFh find any event, regardless of status
  445.         other negative values, match error code
  446.     DH = direction
  447.         00h chronological order, earliest to latest
  448.         01h reverse chronological order, latest to earliest
  449.     DL = queue to search
  450.         00h task queue
  451.         01h receive queue
  452.         02h log queue
  453. Return: AX = 0000h successful
  454.         BX = event handle for found event
  455.        < 0       error code (see AX=CB01h)
  456. SeeAlso: AX=CB06h,AX=CB07h
  457. ----------2FCB06-----------------------------
  458. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  459.     AX = CB06h
  460.     DL = queue to search
  461.         00h task queue
  462.         01h receive queue
  463.         02h log queue
  464. Return: AX = 0000h successful
  465.         BX = event handle for found event
  466.        < 0       error code (see AX=CB01h)
  467. Note:    direction of search is same as preceding FIND FIRST call
  468. SeeAlso: AX=CB05h
  469. ----------2FCB07-----------------------------
  470. INT 2F - Communicating Applications Specification - OPEN FILE
  471.     AX = CB07h
  472.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  473.     CX = receive file number (ignored for task queue and log queue)
  474.         0000h  open receive control file
  475.         N       open Nth received data file
  476.     DL = queue
  477.         00h task queue
  478.         01h receive queue control file or received file, as given by CX
  479.         02h log queue
  480.         03h group file in task queue (v1.2+)
  481.         04h group file in log queue (v1.2+)
  482. Return: AX = 0000h successful
  483.         BX = DOS file handle for requested file
  484.        < 0       error code (see AX=CB01h)
  485. Note:    the returned file handle has been opened in read-only mode and should
  486.       be closed with INT 21/AH=3Eh after use
  487. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  488. ----------2FCB08-----------------------------
  489. INT 2F - Communicating Applications Specification - DELETE FILE
  490.     AX = CB08h
  491.     BX = event handle
  492.     CX = receive file number
  493.         0000h delete ALL received files and receive control file
  494.         N      delete Nth received file
  495.     DL = queue
  496.         00h delete control file in task queue and corresponding group file
  497.         if it exists
  498.         01h delete file in receive queue, as given by CX
  499.         02h delete control file in log queue (individual deletions not
  500.         recommended, to maintain integrity of log) and corresponding
  501.         group file if it exists
  502. Return: AX = 0000h successful
  503.        < 0       error code (see AX=CB01h)\
  504. SeeAlso: AX=CB02h,AX=CB09h
  505. ----------2FCB09-----------------------------
  506. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  507.     AX = CB09h
  508.     DL = queue
  509.         00h delete all control files in task queue, including all group
  510.         files
  511.         01h delete all files in receive queue
  512.         02h delete all control files in log queue, including all group
  513.         files
  514. Return: AX = 0000h successful
  515.        < 0       error code (see AX=CB01h)
  516. SeeAlso: AX=CB08h
  517. ----------2FCB0A-----------------------------
  518. INT 2F - Communicating Applications Specification - GET EVENT DATE
  519.     AX = CB0Ah
  520.     BX = event handle
  521.     DL = queue
  522.         00h task queue
  523.         01h receive queue
  524.         02h log queue
  525. Return: AX = 0000h successful
  526.         CX = year
  527.         DH = month
  528.         DL = day
  529.        < 0       error code (see AX=CB01h)
  530. SeeAlso: AX=CB0Bh,AX=CB0Ch
  531. ----------2FCB0B-----------------------------
  532. INT 2F - Communicating Applications Specification - SET TASK DATE
  533.     AX = CB0Bh
  534.     BX = event handle (task event only)
  535.     CX = year
  536.     DH = month
  537.     DL = day
  538. Return: AX = 0000h successful
  539.        < 0       error code (see AX=CB01h)
  540. Note:    setting a task's date and time to before the current date and time
  541.       causes it to execute immediately
  542. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  543. ----------2FCB0C-----------------------------
  544. INT 2F - Communicating Applications Specification - GET EVENT TIME
  545.     AX = CB0Ch
  546.     BX = event handle
  547.     DL = queue
  548.         00h task queue
  549.         01h receive queue
  550.         02h log queue
  551. Return: AX = 0000h successful
  552.         CH = hour
  553.         CL = minute
  554.         DH = second
  555.         DL = 00h
  556.        < 0       error code (see AX=CB01h)
  557. SeeAlso: AX=CB0Ah,AX=CB0Dh
  558. ----------2FCB0D-----------------------------
  559. INT 2F - Communicating Applications Specification - SET TASK TIME
  560.     AX = CB0Dh
  561.     BX = event handle (task events only)
  562.     CH = hour
  563.     CL = minute
  564.     DH = second
  565.     DL unused
  566. Return: AX = 0000h successful
  567.        < 0       error code (see AX=CB01h)
  568. Note:    setting a task's date and time to before the current date and time
  569.       causes it to execute immediately
  570. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  571. ----------2FCB0E-----------------------------
  572. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  573.     AX = CB0Eh
  574.     DS:DX -> 256-byte buffer
  575. Return: AX = 0000h successful
  576.         buffer filled
  577.        < 0       error code (see AX=CB01h)
  578.  
  579. Format of external data block:
  580. Offset    Size    Description
  581.  00h    BYTE    CAS major version
  582.  01h    BYTE    CAS minor version
  583.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  584.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  585.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  586.  60h 32 BYTEs    ASCIZ default sender name
  587.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  588.  95h 107 BYTEs    reserved
  589. ----------2FCB0F-----------------------------
  590. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  591.     AX = CB0Fh
  592.     DL = subfunction
  593.         00h get current autoreceive state
  594.         01h set autoreceive state
  595.         DH = number of rings before answer, 00h = never
  596. Return: AX = 0000h autoreceive disabled
  597.        = N       number of rings before answer
  598.        < 0       error code (see AX=CB01h)
  599. ----------2FCB10-----------------------------
  600. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  601.     AX = CB10h
  602.     DS:DX -> 512-byte buffer
  603. Return: AX = 0000h successful
  604.         BX = event handle of current event or negative error code if
  605.             no current event
  606.         buffer filled
  607.        < 0       error code (see AX=CB01h)
  608. SeeAlso: AX=CB02h,AX=CB0Dh
  609.  
  610. Format of status area:
  611. Offset    Size    Description
  612.  00h    BYTE    event type
  613.         00h send
  614.         01h receive
  615.         02h polled send
  616.         03h polled receive
  617.         04h to 7Fh reserved
  618.         FFh serious hardware error
  619.  01h    BYTE    transfer type
  620.         00h 200x200 dpi, FAX mode
  621.         01h 100x200 dpi, FAX mode
  622.         02h file transfer mode
  623.         03h to 7Fh reserved
  624.  02h    WORD    event status 
  625.         0000h completed successfully
  626.         0001h waiting
  627.         0002h number dialed
  628.         0003h connected, sending
  629.         0004h connected, receiving
  630.         0005h aborted
  631.         0006h to 007Fh reserved
  632.         0080h to 7FFFh application-specific events
  633.         8000h to FFFFh error codes
  634.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  635.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  636.  08h    WORD    number of files to transfer, max 7FFFh
  637.  0Ah    WORD    offset of file transfer record
  638.  0Ch 47 BYTEs    ASCIZ phone number to call
  639.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  640.  7Bh    BYTE    reserved (00h)
  641.  7Ch    BYTE    connect time, seconds
  642.  7Dh    BYTE    connect time, minutes
  643.  7Eh    BYTE    connect time, hours
  644.  7Fh    DWORD    total number of pages in all files
  645.  83h    DWORD    pages already transmitted 
  646.  87h    WORD    number of files already transmitted
  647.  89h    BYTE    cover page flag
  648.         00h don't transmit cover page
  649.         01h transmit cover page
  650.         02h to 7Fh reserved
  651.  8Ah    WORD    total number of transmission errors
  652.  8Ch 78 BYTEs    reserved (zeros)
  653.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  654.  EFH 32 BYTEs    ASCIZ destination name
  655. 10Fh 32 BYTEs    ASCIZ sender name
  656. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  657. 17Fh 128 BYTEs    file transfer record for current event (see below)
  658.  
  659. Format of file transfer record:
  660. Offset    Size    Description
  661.  00h    BYTE    file type (ignored unless FAX)
  662.         00h ASCII
  663.         01h PCX
  664.         02h DCX
  665.         03h to 7Fh reserved
  666.  01h    BYTE    text size for ASCII FAX file
  667.         00h = 80 columns by 66 lines (11 inches)
  668.         01h = 132 columns by 88 lines (11 inches)
  669.         02h to 7Fh reserved
  670.  02h    BYTE    status of file
  671.         00h untouched
  672.         01h opened
  673.         02h moved
  674.         03h deleted
  675.         04h not yet received
  676.         05h to 7Fh reserved
  677.  03h    DWORD    bytes already transmitted
  678.  07h    DWORD    file size in bytes
  679.  0Bh    WORD    pages alread transmitted
  680.  0Dh    WORD    number of pages in file
  681.  0Fh 80 BYTEs    ASCIZ filename
  682.  5Fh    BYTE    1/8 inch page length
  683.         if page length below set to 01h through 7Fh, this value 
  684.         specifies additional 1/8 inch increments to page length
  685.  60h    BYTE    page length
  686.         00h = 11 inches
  687.         01h to 7Fh = page length is this number of inches plus value of
  688.             1/8 inch field above
  689.         80h to FEh reserved
  690.         FFh = ASCII pages ending with formfeed
  691.  61h 31 BYTEs    reserved (zeros)
  692. ----------2FCB11-----------------------------
  693. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  694.     AX = CB11h
  695.     DL = queue to get status of
  696.         00h task queue
  697.         01h receive queue
  698.         02h log queue
  699.         03h send events (v1.2+)
  700.         04h receive events (v1.2+)
  701. Return: AX >= 0     total number of changes made to queue, modulo 32768
  702.         BX = number of control files currently in queue
  703.         CX = number of received files (zero for task and log queues)
  704.     AX < 0    error code (see AX=CB01h)
  705. SeeAlso: AX=CB12h
  706. ----------2FCB11DL03-------------------------
  707. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  708.     AX = CB11h
  709.     DL = 03h
  710. Return: AX = number of successful sends since resident manager started
  711.     BX = number of unsuccessful sends, including warnings
  712. SeeAlso: AX=CB11h/DL=04h
  713. ----------2FCB11DL04-------------------------
  714. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  715.     AX = CB11h
  716.     DL = 04h
  717. Return:    AX = number of received file events since resident manager started
  718.     BX = number of received FAX events
  719. SeeAlso: AX=CB11h/DL=03h
  720. ----------2FCB12-----------------------------
  721. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  722.     AX = CB12h
  723.     DS:DX -> 128-byte status buffer
  724. Return: AX = 0000h successful
  725.         buffer filled with hardware-dependent status information
  726.        < 0       error code (see AX=CB01h)
  727. SeeAlso: AX=CB10h,AX=CB11h
  728.  
  729. Format of status buffer for Intel Connection CoProcessor:
  730. Offset    Size    Description
  731.  00h    BYTE    bit flags
  732.         bit 7: hardware busy sending or receiving
  733.         bit 6: last page of data
  734.         bit 5: no data on current page
  735.         bit 4: retransmit request for current page being transmitted
  736.         bit 3: NSF mode active
  737.         bits 2-0: reserved
  738.  01h    BYTE    number of kilobytes of free buffer space
  739.  02h    BYTE    page buffer status
  740.         bit 7: Connection CoProcessor has documents to send
  741.         bits 6-0: number of pages in buffer
  742.  03h    BYTE    number of retries left for dialing number
  743.  04h    BYTE    page number to retransmit
  744.  05h    BYTE    communications status
  745.         bit 7: originating call
  746.         bit 6: FAX message to be sent
  747.         bit 5: on line
  748.         bit 4: ring detected and receive enabled
  749.         bit 3: buffer dumped on receive
  750.         bits 2-0: hardware sequence state
  751.             000 idle
  752.             001 dial
  753.             010 answer
  754.             011 transmit
  755.             100 receive
  756.             101 pre-message
  757.             110 post-message
  758.             111 disconnect
  759.  06h    BYTE    baud rate
  760.         bit 7: reserved
  761.         bits 6-4: baud rate
  762.             000 = 300 baud    (V.21 SDLC or HDLC mode)
  763.             100 = 2400 baud (V.27 ter)
  764.             101 = 4800 baud (V.27 ter)
  765.             110 = 7200 baud (V.29)
  766.             111 = 9600 baud (V.29)
  767.         bits 3-0: reserved, should be 0110
  768.  07h  3 BYTEs    reserved
  769.  0Ah    BYTE    hardware status
  770.         bit 7: modem option installed
  771.         bit 6: Connection CoProcessor has control of DAA (not latched)
  772.         bit 5: on line (not latched)
  773.         bit 4: ring detected (not latched)
  774.         bit 3: data in command buffer (not latched)
  775.         bit 2: set if using DMA channel 1, clear if using DMA channel 3
  776.         bit 1: line length compensation bit 1 set (not latched)
  777.         bit 0: line length compensation bit 0 set (not latched)
  778.  0Bh    BYTE    switch states
  779.         bit 7: reserved
  780.         bit 6: unused
  781.         bit 5: spare switch open
  782.         bit 4: FAX ADR1 switch open
  783.         bit 3: FAX ADR0 switch open
  784.         bit 2: alternate interrupt switch open
  785.         bit 1: COM SEL 1 switch open
  786.         bit 0: COM SEL 0 switch open
  787.             Note: valid combinations of bits 0-2 are
  788.                 000  COM2 IRQ3 IObase 2F8h
  789.                 001  COM1 IRQ4 IObase 3F8h
  790.                 010  COM4 IRQ3 IObase 2E8h
  791.                 011  COM3 IRQ4 IObase 3E8h
  792.                 110  COM4 IRQ2 IObase 2E8h
  793.                 111  COM3 IRQ5 IObase 3E8h
  794.  0Ch    BYTE    bit flags
  795.         bit 7: reserved
  796.         bit 6: auxiliary relay forced ON
  797.         bit 5: modem select relay forced ON
  798.         bit 4: offhook relay forced ON
  799.         bit 3: 9600 bps enabled
  800.         bit 2: 7200 bps enabled
  801.         bit 1: 4800 bps enabled
  802.         bit 0: 2400 bps enabled
  803.  0Dh    BYTE    reserved
  804.  0Eh    WORD    error count (only valid while busy, reset when idle)
  805.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  806.  14h    BYTE    'A' if Connection CoProcessor board present
  807.  15h  9 BYTEs    reserved
  808.  1Eh 21 BYTEs    ASCIZ CCITT identification
  809.  33h 77 BYTEs    reserved
  810.  
  811. Format of status buffer for Intel SatisFAXtion board:
  812. Offset    Size    Description
  813.  00h    BYTE    connection status flags
  814.         bit 7: busy in T.30 CCITT fax protocol
  815.         bit 6: data on current page/file (only used for block xfers)
  816.         bit 5: retransmission of last page requested
  817.         bit 4: in file transfer mode
  818.         bit 3: data in buffer
  819.         bit 2: data buffer dumped on receive
  820.         bit 1: 200x100 dpi resolution instead of 200x200 dpi
  821.         bit 0: data modem in use, FAX image modem not available
  822.  01h    BYTE    board state
  823.         bit 7: reserved
  824.         bit 6: handset jack active, data and FAX modems not available
  825.         bits 5-3: current bit rate
  826.             000     300 bps (V.21 HDLC)
  827.             100 2400 bps (V.27 ter)
  828.             101 4800 bps (V.27 ter)
  829.             110 7200 bps (V.29)
  830.             111 9600 bps (V.29)
  831.         bits 2-0: T.30 CCITT protocol state
  832.             000 idle
  833.             001 dialing
  834.             010 answering
  835.             011 transmitting
  836.             100 receiving
  837.             101 pre-message
  838.             110 post-message
  839.             111 disconnect
  840.  02h    BYTE    number of KB free in buffer
  841.  03h    BYTE    number of pages or files in buffer
  842.  04h    BYTE    number of redials remaining on current number
  843.  05h    BYTE    FAX page number to retransmit
  844.  06h    BYTE    current page/file in block transfer
  845.  07h    BYTE    number of rings received (only if auto-answer enabled)
  846.  08h    WORD    error count
  847.  0Ah    DWORD    length of file being transferred
  848.  0Eh  6 BYTEs    reserved
  849.  14h    BYTE    'B' is SatisFAXtion board present
  850.  15h 13 BYTEs    ASCIZ transfer agent name
  851.  22h  5 BYTEs    ASCIZ transfer agent version number
  852.  27h 13 BYTEs    ASCIZ resident loader name
  853.  34h  5 BYTEs    ASCIZ resident loader version number
  854.  39h 21 BYTEs    ASCIZ remote CSID
  855.  4Eh 13 BYTEs    ASCIZ resident manager name
  856.  5Bh  5 BYTEs    ASCIZ resident manager version number
  857.  60h 32 BYTEs    reserved
  858. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  859.       by examining the byte at offset 14h
  860. ----------2FCB13DL00-------------------------
  861. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  862.     AX = CB13h
  863.     DL = 00h
  864. Return: AX = 0040h in progress
  865.        >= 0       passed
  866.        < 0       hardware-dependent failure code (see below)
  867. SeeAlso: AX=CB13h/DL=01h
  868.  
  869. Intel Connection CoProcessor failure codes:
  870.     bit 3: 9600 bps FAX modem module failed
  871.     bit 2: SDLC chip failed
  872.     bit 1: RAM failed
  873.     bit 0: ROM checksum failed
  874.  
  875. Intel SatisFAXtion failure codes:
  876.     bit 1: 2400 bps data modem failed
  877.     bit 0: 9600 bps FAX modem failed
  878. ----------2FCB13DL01-------------------------
  879. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  880.     AX = CB13h
  881.     DL = 01h
  882. Return: AX = 0000h successfully started
  883.        < 0       error code (see AX=CB01h)
  884. SeeAlso: AX=CB13h/DL=00h
  885. ----------2FCB14-----------------------------
  886. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  887.     AX = CB14h
  888.     BX = event handle
  889.     CX = receive file number
  890.          0001h first received file
  891.          N       Nth received file
  892.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  893. Return: AX = 0000h successful
  894.        < 0       error code (see AX=CB01h)
  895. ----------2FCB15-----------------------------
  896. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  897.     AX = CB15h
  898.     DS:DX -> variable-length data area (see below)
  899. Return: AX >= 0    event handle
  900.        < 0    error code (see AX=CB01h)
  901. SeeAlso: AX=CB01h
  902.  
  903. Format of data area:
  904. Offset    Size    Description
  905.  00h    BYTE    transfer type
  906.         00h = 200x200 dpi, fax mode
  907.         01h = 100x200 dpi, fax mode
  908.         02h = file transfer mode
  909.         03h to 7Fh reserved
  910.  01h    BYTE    text size
  911.         00h = 80 columns
  912.         01h = 132 columns
  913.         02h to 7Fh reserved
  914.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  915.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  916.  06h 32 BYTEs    ASCIZ destination name
  917.  26h 80 BYTEs    ASCIZ name of file to send
  918.  76h 47 BYTEs    ASCIZ phone number to dial
  919.  A5h 64 BYTEs    ASCIZ application-specific tag string
  920.  E5h    BYTE    reserved (00h)
  921.  E6h    BYTE    cover page
  922.         00h don't send cover page
  923.         01h send cover page
  924.         02h to 7Fh reserved
  925.  E7h 23 BYTEs    reserved (zeros)
  926.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  927.         set to 01h)
  928. ----------2FCB16BX1234-----------------------
  929. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  930.     AX = CB16h
  931.     BX = 1234h
  932.     CX = 5678h
  933.     DX = 9ABCh
  934. Return: AX = 0000h successful
  935.        < 0       error code
  936. Note:    the MTEZ XpressFax CASMGR ignores the values in BX,CX, and DX
  937. SeeAlso: AX=C000h"MTEZ",AX=CB00h
  938. ----------2FCB17-----------------------------
  939. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  940.     AX = CB17h
  941.     BX = event handle
  942.     CL = cover page status
  943.         00h not read
  944.         01h read by user
  945. Return: AX = 0000h successful
  946.        < 0       error code
  947. ----------2FCB80-----------------------------
  948. INT 2F - Intel SatisFAXtion CASMGR - ???
  949.     AX = CB80h
  950.     ???
  951. Return: ???
  952. ----------2FCB81-----------------------------
  953. INT 2F - Intel SatisFAXtion CASMGR - ???
  954.     AX = CB81h
  955.     ???
  956. Return: ???
  957. ----------2FCB82-----------------------------
  958. INT 2F - Intel SatisFAXtion CASMGR - ???
  959.     AX = CB82h
  960.     ???
  961. Return: ???
  962. ----------2FCBDCBL56-------------------------
  963. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  964.     AX = CBDCh
  965.     BL = 56h
  966.     BH = line number (starts with 1)
  967.     CX:DX -> 32-byte status buffer or 80 character string
  968. Return: AX = number of cards installed, or FFFFh on error
  969. Program: Comwave manufacturers the Microfax line of fax cards which are a high-
  970.       performance multi-card FAX solution for OEMs.
  971. Note:    defaults to AH=CBh but can be changed
  972. SeeAlso: AX=CBDDh,AX=DA00h
  973. ----------2FCBDDBL56-------------------------
  974. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  975.     AX = CBDDh
  976.     BL = 56h
  977.     BH = ?
  978.     CX:DX -> command to execute
  979. Return: AX = status
  980.         0000h success
  981.         FFFFh on error
  982. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  983. ----------2FCC--SI5453-----------------------
  984. INT 2F U - Qualitas Qcach v4.00
  985.     AH = CCh
  986.     SI = 5453h or 7473h
  987.     AL = ???
  988.     DL = 00h or ???
  989. Return: SI = 7473h
  990.     ???
  991. ----------2FCD00-----------------------------
  992. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  993.     AX = CD00h
  994. Return: AL = 00h not installed, OK to install
  995.          01h not installed, not OK to install
  996.          FFh installed
  997. SeeAlso: AX=CD02h"Image"
  998. ----------2FCD00-----------------------------
  999. INT 2F - SWELL.EXE - INSTALLATION CHECK
  1000.     AX = CD00h
  1001. Return: AX = 00FFh installed
  1002.         BH = major version
  1003.         BL = minor version
  1004. Note:    SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  1005.       process with INT 21/AH=4Bh
  1006. ----------2FCD01-----------------------------
  1007. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  1008.     AX = CD01h
  1009.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  1010. Return: AL = 00h successful
  1011.         CX:BX -> internal character device name
  1012.        = 80h error
  1013. ----------2FCD01-----------------------------
  1014. INT 2F - SWELL.EXE - SUSPEND ONCE
  1015.     AX = CD01h
  1016. Return: AX = 0000h
  1017. SeeAlso: AX=CD02h"SWELL"
  1018. ----------2FCD02-----------------------------
  1019. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  1020.     AX = CD02h
  1021. Return: AL = 00h/01h successful
  1022.         BH = major version number (BCD)
  1023.         BL = minor version number (BCD)
  1024.        = 80h error
  1025. Note:    if return AL = 01h, the IPI supports network redirection
  1026. SeeAlso: AX=CD00h"Image"
  1027. ----------2FCD02-----------------------------
  1028. INT 2F - SWELL.EXE - SUSPEND
  1029.     AX = CD02h
  1030. Return: AX = 0000h
  1031. SeeAlso: AX=CD03h"SWELL"
  1032. ----------2FCD03-----------------------------
  1033. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  1034.     AX = CD03h
  1035.     BX = scan line
  1036.     CX = requested density in dots per inch (300, 600, or 1200)
  1037. Return: AL = 00h succesful
  1038.         CX = density at which scan line was mapped
  1039.         ES:DI -> start of scan line
  1040.     AL = 80h unsuccessful
  1041.        = 81h scan line out of range
  1042.        = 82h unsupported scan line density
  1043.        = 83h out of memory
  1044. SeeAlso: AX=CD04h"Image"
  1045. ----------2FCD03-----------------------------
  1046. INT 2F - SWELL.EXE - ACTIVATE
  1047.     AX = CD03h
  1048. Return: AX = 0000h
  1049. SeeAlso: AX=CD02h"SWELL"
  1050. ----------2FCD04-----------------------------
  1051. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  1052.     AX = CD04h
  1053.     CX:BX -> structure (see below)
  1054. Return: AL = 00h successful
  1055.        = 80h unsuccessful
  1056.        = 81h scan line out of range
  1057.        = 82h unsupported scan line density
  1058.        = 83h out of memory
  1059.        = 84h unrecognized source
  1060.        = 85h initialization error
  1061. SeeAlso: AX=CD03h"Image"
  1062.  
  1063. Format of structure:
  1064. Offset    Size    Description
  1065.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  1066.  02h    DWORD    pointer to image data
  1067.  06h    WORD    scan line on which to place
  1068.  08h    WORD    bit offset from start of scan line at which to place
  1069.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  1070.  0Ch    WORD    width in bits of data
  1071.  0Eh    WORD    source logical page number
  1072.  10h    WORD    source handle (only if source in expanded memory)
  1073.  12h    WORD    source offset (only if source in expanded memory)
  1074. ----------2FCD04-----------------------------
  1075. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  1076.     AX = CD04h
  1077. Return: AX = 0000h
  1078. SeeAlso: AX=CD05h"SWELL"
  1079. ----------2FCD05-----------------------------
  1080. INT 2F - Intel Image Processing Interface - PRINT PAGE
  1081.     AX = CD05h
  1082. Return: AL = 00h successful
  1083.        = 80h unsuccessful
  1084. Note:    page image is retained, so multiple calls will print multiple copies of
  1085.       the page
  1086. SeeAlso: AX=CD06h"Image"
  1087. ----------2FCD05-----------------------------
  1088. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  1089.     AX = CD05h
  1090. Return: AX = 0000h
  1091. SeeAlso: AX=CD04h"SWELL"
  1092. ----------2FCD06-----------------------------
  1093. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  1094.     AX = CD06h
  1095. Return: AL = 00h successful
  1096.        = 80h unsuccessful
  1097. Note:    palette is reset to default
  1098. SeeAlso: AX=CD09h"Image"
  1099. ----------2FCD06-----------------------------
  1100. INT 2F - SWELL.EXE - UNINSTALL
  1101.     AX = CD06h
  1102. Return: AX = 0000h uninstalled
  1103.        = 8002h programs still swapped, not uninstalled
  1104. ----------2FCD07-----------------------------
  1105. INT 2F - Intel Image Processing Interface - reserved
  1106.     AX = CD07h
  1107. ----------2FCD07-----------------------------
  1108. INT 2F - SWELL.EXE - GET INFO
  1109.     AX = CD07h
  1110.     ES:BX -> 32-byte buffer for info
  1111. Return: AX = 0000h successful
  1112.         ES:BX buffer filled
  1113.        = 8001h buffer wrong size
  1114.  
  1115. Format of info buffer:
  1116. Offset    Size    Description
  1117.  00h    WORD    20h  (total size of buffer)
  1118.  02h    BYTE    suspend-once mode active if nonzero
  1119.  03h    BYTE    00h active, 01h suspended
  1120.  04h    BYTE    00h quiet, 01h verbose
  1121.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  1122.  06h 26 BYTEs    unused???
  1123. ----------2FCD08-----------------------------
  1124. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  1125.     AX = CD08h
  1126.     CX:BX -> structure (see below)
  1127. Return: AL = 00h successful
  1128.        = 80h unsuccessful
  1129.        = 81h scan line out of range
  1130.        = 82h unsupported scan line density
  1131.        = 83h out of memory
  1132.        = 84h unrecognized source
  1133.        = 85h initialization error
  1134. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  1135.  
  1136. Format of structure:
  1137. Offset    Size    Description
  1138.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  1139.  02h    DWORD    pointer to image data
  1140.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  1141.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  1142.  0Ah    WORD    left cropping (currently must be zero)
  1143.  0Ch    WORD    top cropping (currently must be zero)
  1144.  0Eh    WORD    width (currently must be 8000h)
  1145.  10h    WORD    height (currently must be 8000h)
  1146.  12h    WORD    horizontal size of image in 1200 dpi units
  1147.  14h    WORD    vertical size of image in 1200 dpi units
  1148.  16h    WORD    aspect ratio (currently reserved)
  1149.  18h    WORD    initialization flag (if 01h, initialization is performed)
  1150.  1Ah    WORD    pixels per line of source data
  1151.  1Ch    WORD    number of scan lines in source data
  1152.  1Eh    WORD    number of scan lines in packet
  1153.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  1154.  22h    WORD    pixels per byte (1,2,4, or 8)
  1155.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  1156.  26h    WORD    source page number (if in expanded memory)
  1157.  28h    WORD    source handle (if in expanded memory)
  1158.  2Ah    WORD    source offset (if in expanded memory)
  1159. ----------2FCD08-----------------------------
  1160. INT 2F - SWELL.EXE - UNUSED
  1161.     AX = CD08h
  1162. Return: AX = FFFFh (error)
  1163. ----------2FCD09-----------------------------
  1164. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  1165.     AX = CD09h
  1166.     CX:BX -> structure (see below)
  1167. Return: AL = 00h successful
  1168.        = 80h unsuccessful
  1169. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  1170.  
  1171. Format of structure:
  1172. Offset    Size    Description
  1173.  00h    BYTE    style
  1174.         44h ('D') diamond style
  1175.         4Ch ('L') line style
  1176.  01h    BYTE    reserved (00h)
  1177.  02h    WORD    frequency in lines per inch [sic]
  1178.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  1179.  04h    WORD    screen angle in degrees (-360 to 360)
  1180.         currently coerced to nearest of -45, 0, 45, or 90
  1181. ----------2FCD09-----------------------------
  1182. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  1183.     AX = CD09h
  1184. Return: AX = 0000h
  1185. SeeAlso: AX=CD0Ah"SWELL"
  1186. ----------2FCD0A-----------------------------
  1187. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  1188.     AX = CD0Ah
  1189.     CX:BX -> palette structure (see below)
  1190. Return: AL = 00h successful
  1191.        = 80h unsuccessful
  1192. SeeAlso: AX=CD09h"Image Processing"
  1193.  
  1194. Format of palette structure:
  1195. Offset    Size    Description
  1196.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  1197.  01h    2**N    palette translation values, one per possible pixel value
  1198. ----------2FCD0A-----------------------------
  1199. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  1200.     AX = CD0Ah
  1201. Return: AX = 0000h
  1202. SeeAlso: AX=CD09h"SWELL"
  1203. ----------2FCF00-----------------------------
  1204. INT 2F - TEMPLEXX - INSTALLATION CHECK
  1205.     AX = CF00h
  1206. Return: AL = FFh if installed
  1207. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  1208. Note:    values in AL other than 00h cause an immediate return without modifying
  1209.       any registers
  1210. ----------2FD000-----------------------------
  1211. INT 2F - MDEBUG display driver - GET DRIVER STATUS
  1212.     AX = D000h
  1213. Return: CF set on error
  1214.         all other registers must be unchanged)
  1215.     CF clear if successful
  1216.         AL = FFh
  1217.         AH = driver semaphor
  1218.         00h driver is not active
  1219.         01h driver is active
  1220.         BX = CS of the driver
  1221.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  1222.         DL = buffer semaphor
  1223.         00h driver is not pending
  1224.         01h driver is pending between functions 02h and 03h
  1225.         DH = show semaphor
  1226.         00h driver is not pending
  1227.         01h driver is pending between functions 04h and 05h
  1228. Notes:    MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,
  1229.       including a memory monitor, an interpreter and a disassembler
  1230.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1231.       FFh; the default is D0h for the display driver and D1h for the
  1232.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  1233.       numbers used)
  1234.     this function MUST be reentrant, as MDEBUG calls it after every popup
  1235.       before any other actions.  The handler should not change any
  1236.       registers if the display is in an unsupported mode or in a mode
  1237.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  1238.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  1239.       not call any of the other functions for this popup session.
  1240.     MDEBUG will not call the other functions if the returned version is
  1241.       less than the actual version of MDEBUG.
  1242.     if the driver is reentrant, DL and DH should be 00h
  1243. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  1244. ----------2FD000-----------------------------
  1245. INT 2F - ZWmous - INSTALLATION CHECK
  1246.     AX = D000h
  1247. Return: AX = 5A57h ("ZW") if installed
  1248.         BX = segment of resident code
  1249. Note:    ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  1250.       with many non-mouse applications by entering the letter under the
  1251.       mouse cursor on button presses
  1252. SeeAlso: INT 33/AX=0003h
  1253. ----------2FD000-----------------------------
  1254. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  1255.     AX = D000h
  1256. Return: AL = FF if CD/Networker TSR is loaded
  1257.     BX = 4D44h ("MD") signature
  1258.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  1259.     DX = bitmap identifying all loaded CD/Networker TSRs.
  1260. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  1261.       resident redirector TSR and a transient program that controls the
  1262.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  1263.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  1264. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  1265. ----------2FD001-----------------------------
  1266. INT 2F - MDEBUG display driver - INITIALIZE DRIVER
  1267.     AX = D001h
  1268. Return: CF set on error
  1269.     AL = driver semaphor
  1270.     AH = buffer semaphor
  1271. Notes:    MDEBUG calls this function after every succesful call of the function
  1272.       00h. The function should reset all internal data and the status of
  1273.       the driver. If this function returns an error, MDEBUG will not call
  1274.       the other functions in this popup session.
  1275.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1276.       FFh; the default is D0h for the display driver and D1h for the
  1277.       command driver
  1278. SeeAlso: AX=D000h
  1279. ----------2FD002-----------------------------
  1280. INT 2F - MDEBUG display driver - SAVE GRAPHIC DATA
  1281.     AX = D002h
  1282. Return: CF set on error
  1283.     CF clear if successful
  1284.         display memory saved and display switched to one of the text modes
  1285.           02h, 03h or 07h.
  1286. Note:    MDEBUG calls this function only once every popup session before
  1287.       displaying its windows.
  1288. SeeAlso: AX=D000h,AX=D003h
  1289. ----------2FD002BX4D44-----------------------
  1290. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  1291.     AX = D002h
  1292.     BX = 4D44h
  1293.     DX = bitmap identifying one loaded CD/Networker TSR
  1294. Return: ES:DI -> data area owned by TSR
  1295. Note:    the format of the data area changes with each minor revision, so it
  1296.       cannot be counted on
  1297. SeeAlso: AX=D000h"Lotus"
  1298. ----------2FD003-----------------------------
  1299. INT 2F - MDEBUG display driver - RESTORE GRAPHIC DATA
  1300.     AX = D003h
  1301. Return: CF set on error
  1302.     CF clear if successful
  1303.         display restored to the mode it was in before calling AX=D002h and
  1304.           the display memory is restored
  1305. Note:    MDEBUG calls this function only once every popup session just before
  1306.      it exits to normal DOS.
  1307. SeeAlso: AX=D000h,AX=D002h
  1308. ----------2FD004-----------------------------
  1309. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  1310.     AX = D004h
  1311. Return: CF set on error
  1312.     CF clear if successful
  1313.         display switched to mode it was in before calling AX=D002h and the
  1314.           display memory is restored
  1315. Note:    This function needn't save the display memory before changing it.
  1316. SeeAlso: AX=D000h,AX=D005h
  1317. ----------2FD005-----------------------------
  1318. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  1319.     AX = D005h
  1320. Return: CF set on error
  1321.     CF clear if successful
  1322.         display restored to mode it was in before calling AX=D004h
  1323. Note:    This function needn't save or change the display memory
  1324. SeeAlso: AX=D000h,AX=D004h
  1325. ----------2FD0-------------------------------
  1326. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  1327.     AH = D0h
  1328.     AL = 06h-7Fh
  1329. Note:    these functions are reserved for future use
  1330. ----------2FD0-------------------------------
  1331. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  1332.     AH = D0h
  1333.     AL = 80h-FFh
  1334. Note:    these functions numbers are reserved for user defined features (e.g.
  1335.       communication between the transient und resident parts of the driver)
  1336. ----------2FD100-----------------------------
  1337. INT 2F C - MDEBUG command driver - GET STATUS
  1338.     AX = D100h
  1339.     BX = version of MDEBUG (BH = major, BL = minor)
  1340.     CX = command driver counter
  1341. ---v1.60+---
  1342.     DS:SI -> MDEBUG identification table (see below)
  1343.     ES = segment of display memory used by MDEBUG
  1344.     DI = size of video mode used by MDEBUG
  1345.         (high byte = lines, low byte = columns)
  1346. Return: DL = FFh
  1347.     BX = version number of the driver if it is less than the version in BX,
  1348.          else unchanged
  1349.     CX incremented
  1350. Notes:    MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,
  1351.       including a memory monitor, an interpreter, and a disassembler
  1352.     called by MDEBUG at start of popup session; if the version number
  1353.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  1354.       not call any of the other functions during this popup session
  1355.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1356.       FFh; the default is D0h for the display driver and D1h for the
  1357.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  1358.       actually used)
  1359.     this function must end with a far call to the old INT 2F handler after
  1360.       changing the registers
  1361.     this function MUST be reentrant
  1362.     command drivers must also declare the following data at the given
  1363.       offsets in the code segment
  1364.         100h  3 BYTEs    JMP-command in .COM-files
  1365.         103h    BYTE    NOP-command (90h)
  1366.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  1367.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  1368.                 each driver must have a unique name
  1369.     MDEBUG will pass every key and command to the command driver(s) before
  1370.       checking for a valid internal command
  1371. SeeAlso: AX=D000h,AX=D101h
  1372.  
  1373. Format of MDEBUG identification table:
  1374. Offset    Size    Description
  1375.  -2    WORD    entry offset
  1376.  00h    WORD    CS of MDEBUG
  1377.  02h    DWORD    old INT 08h vector
  1378.  06h    DWORD    old INT 09h vector
  1379.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  1380.  0Eh    BYTE    length of version string
  1381.  0Fh  N BYTEs    version string
  1382. ----------2FD101-----------------------------
  1383. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  1384.     AX = D101h
  1385.     CX = command driver counter
  1386. Return: DL = FFh if successful
  1387.         CX incremented
  1388.          else error: all registers unchanged
  1389. Note:    this function must end with a  far call to the old INT 2F handler after
  1390.       changing the registers
  1391.     this function must be reentrant
  1392. ----------2FD102-----------------------------
  1393. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  1394.     AX = D102h
  1395.     BL = first character of the interpreter command
  1396.     BH = last character of the interpreter command (or blank)
  1397.     DS:SI -> parameter for the interpreter command as ASCIZ string
  1398.     DS:DI -> MDEBUG data structure (see below)
  1399. Return: AL = FFh
  1400.     CF set on error
  1401.         AH = error number
  1402.         01h syntax error
  1403.         02h first shell of the command.com is activ
  1404.         03h esc pressed
  1405.         04h break pressed
  1406.         05h DOS is busy
  1407.         06h command ended
  1408.         07h division by zero
  1409.         08h invalid display driver
  1410.         09h invalid command driver
  1411.         0Ah error 8 and 9
  1412.         0Bh unknown error
  1413.         0Ch new error
  1414.             DS:SI -> ASCIZ error message (max 30 characters)
  1415.            else unknown error
  1416.     CF clear if successful
  1417.         AH = return code
  1418.         00h continue processing the command line
  1419.         01h leave MDEBUG popup session
  1420.         02h leave MDEBUG popup session and automatically popup again
  1421.             if the InDOS flag is zero
  1422.         03h not used (same as 00h)
  1423.         04h not used (same as 00h)
  1424.         05h put new command line into the input buffer,
  1425.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1426.         06h process new command line
  1427.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1428.            else unknown status, but continue processing commmand line
  1429. Note:    this function must end with a far call to the old INT 2F handler (with
  1430.       registers unchanged) if the driver does not support the interpreter
  1431.       command in BX.  Otherwise, the driver must not chain to the old
  1432.       INT 2F.
  1433.  
  1434. Format of MDEBUG data structure:
  1435. Offset    Size    Description
  1436.  00h    WORD    register SE
  1437.  02h    WORD    register OF
  1438.  04h    WORD    register FS
  1439.  06h    WORD    register FO
  1440.  08h    WORD    register AX
  1441.  0Ah    WORD    register BX
  1442.  0Ch    WORD    register CX
  1443.  0Eh    WORD    register DX
  1444.  10h    WORD    register SI
  1445.  12h    WORD    register DI
  1446.  14h    WORD    register DS
  1447.  16h    WORD    register ES
  1448.  18h    WORD    register BP
  1449.  1Ah    WORD    register SS
  1450.  1Ch    WORD    register SP
  1451.  1Eh    WORD    register FL (flags)
  1452.  20h    WORD    register R0
  1453.  22h    WORD    register R1
  1454.  24h    WORD    register R2
  1455.  26h    WORD    register R3
  1456.  28h    WORD    register R4
  1457.  2Ah    WORD    register R5
  1458.  2Ch    WORD    register R6
  1459.  2Eh    WORD    register R7
  1460.  30h    WORD    register R8
  1461.  32h    WORD    register CS, return-address
  1462.  34h    WORD    register IP, return-address
  1463.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  1464.         saved monitor address (v1.70)
  1465.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  1466.         (original register values at popup entry of MDEBUG)
  1467.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1468.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  1469.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1470.  6Ah    DWORD    address of the DOS-invars-table
  1471.  6Eh    DWORD    address of the InDOS flag
  1472.  72h    WORD    offset of the register which is used for the segment of the
  1473.         first monitor window
  1474.  74h    WORD    offset of the register which is used for the offset of the
  1475.         first monitor window
  1476.  76h    WORD    name of the register which is used for the segment of the
  1477.         first monitor segment
  1478.  78h    WORD    name of the register which is used for the offset of the first
  1479.         monitor window     
  1480.  7Ah    WORD    pseudo register 1
  1481.  7Ch    WORD    pseudo register 2
  1482. ----------2FD103-----------------------------
  1483. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  1484.     AX = D103h
  1485.     BX = key code (like result of an interrupt 16h call)
  1486.     CX = 0 -> the cursor is in the ASCII column of the monitor
  1487.     CX = 1 -> the cursor is in one of the hex fields of the monitor
  1488.     DS:SI -> MDEBUG data structure (see AX=D102h)
  1489.     ES:DI -> actual byte in the monitor
  1490. Return: AL = FFh
  1491.     AH = return code
  1492.         00h key processed, read next key
  1493.         01h leave MDEBUG popup session
  1494.         02h leave MDEBUG popup session and automatically popup again if DOS
  1495.         is not busy
  1496.         03h signal an error (beep)
  1497.         04h driver has redefined the key, proceed with the new key
  1498.         BX = new key code
  1499.         MDEBUG will not pass the new key to the command driver(s)
  1500.        else treat like code 00h
  1501. Note:    this function must end with a far call to the old INT 2F handler (with
  1502.       registers unchanged) if the driver does not support the key in BX.
  1503.       Otherwise, the driver must not chain to the old INT 2F.
  1504. SeeAlso: AX=D104h
  1505. ----------2FD104-----------------------------
  1506. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  1507.     AX = D104h
  1508.     DS:SI -> MDEBUG data structure (see AX=D102h)
  1509. Return: AL = FFh
  1510.     AH = return code
  1511.         00h key processed, read next key
  1512.         01h leave MDEBUG popup session
  1513.         02h leave MDEBUG popup session and automactically popup again if
  1514.         DOS is not busy
  1515.         03h signal an error (beep)
  1516.         04h driver has redefined the key, proceed with the new key
  1517.         BX = new key code
  1518.         MDEBUG won't pass the new key to the command driver(s)
  1519.         05h put new command line into the input buffer
  1520.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1521.         06h process new command line
  1522.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1523.        else treat like code 00h
  1524. Note:    this function must end with a far call to the old INT 2F handler if the
  1525.       driver does not support the key in BX.  Otherwise, the driver must
  1526.       not chain to the old INT 2F.
  1527. SeeAlso: AX=D103h
  1528. ----------2FD1-------------------------------
  1529. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1530.     AH = D1h
  1531.     AL = 05h-0Ah
  1532. Note:    these functions are reserved for future use
  1533. ----------2FD110-----------------------------
  1534. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  1535.     AX = D110h
  1536. Return: DL = FFh
  1537.     ES:BX -> next program in the chain for INT 2F
  1538.     CX = code segment of this driver
  1539.     DI = offset of driver identification table (see below) (v1.60+)
  1540. Notes:    only called by the transient part of the driver
  1541.     must be reentrant and the driver must not chain this function to the
  1542.       old INT 2F
  1543.  
  1544. Format of the driver identification table:
  1545. Offset    Size    Description
  1546.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  1547.                          ^- Note: ASCII 129,German U-umlaut
  1548.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  1549.          each driver must have a unique name
  1550. ----------2FD111-----------------------------
  1551. INT 2F - MDEBUG command driver - START DRIVER
  1552.     AX = D111h
  1553. Return: DL = FFh
  1554. Notes:    only called by the transient part of the driver to inform the resident
  1555.       part that it is installed
  1556.     the function must be reentrant and the driver mustn't chain this
  1557.       function to the old INT 2F
  1558. SeeAlso: AX=D101h,AX=D112h
  1559. ----------2FD112-----------------------------
  1560. INT 2F - MDEBUG command driver - END DRIVER
  1561.     AX = D112h
  1562. Return: DL = FFh
  1563. Notes:    only called by the transient part of the driver to inform the resident
  1564.       part that it will be released after this function
  1565.     the function must be reentrant and the driver mustn't chain this
  1566.       function to the old INT 2F
  1567. SeeAlso: AX=D101h,AX=D111h
  1568. ----------2FD1-------------------------------
  1569. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1570.     AH = D1h
  1571.     AL = 13h-7Fh
  1572. Note:    these functions are reserved for future use
  1573. ----------2FD1-------------------------------
  1574. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  1575.     AH = D1h
  1576.     AL = 80h-FFh
  1577. Note:    these functions are reserved for user defined features (e.g.
  1578.       communication between the transient und resident parts of the    driver)
  1579. ----------2FD200BX5144-----------------------
  1580. INT 2F U - Quarterdeck - QEMM/QRAM/VIDRAM/MANIFEST v5.0+ - INSTALLATION CHECK
  1581.     AX = D200h
  1582.     BX = 5144h ("QD")
  1583.     CX = 4D45h ("ME")
  1584.     DX = 4D30h ("M0")
  1585. Return: AL = FFh installed      
  1586.     if BX,CX,DX registers were as specified on entry:
  1587.         BX = 4D45h ("ME")
  1588.         CX = 4D44h ("MD")
  1589.         DX = 5652h ("VR")
  1590. Notes:    QEMM/QRAM/VIDRAM/MANIFEST/etc will search for a free AH value from D2h
  1591.       through FFh, then C0h through D1h
  1592.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  1593.       Quarterdeck product, it just chains to the previous INT 2F handler
  1594. ----------2FD201BX4849-----------------------
  1595. INT 2F U - Quarterdeck - GET QD HIMEM PRESENCE
  1596.     AX = D201h
  1597.     BX = 4849h ("HI")
  1598.     CX = 4D45h ("ME")
  1599.     DX = 4D51h ("MQ")
  1600. Return: BX = 4F4Bh ("OK")
  1601.     ES:DI -> HIMEM entry point
  1602. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1603.       through FFh, then C0h through D1h
  1604. SeeAlso: AX=D201h/BX=5145h
  1605. ----------2FD201BX4849-----------------------
  1606. INT 2F U - Quarterdeck - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  1607.     AX = D201h
  1608.     BX = 4849h ("HI")
  1609.     CX = 5241h ("RA")
  1610.     DX = 4D30h ("M0")
  1611. Return: BX = 4F4Bh ("OK")
  1612.     CX = segment of start of HIRAM chain
  1613.     DX = QEMM/QRAM code segment
  1614. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1615.       through FFh, then C0h through D1h
  1616.     QEMM and QRAM both responded the same
  1617.     the HIRAM memory chain has the same format as the regular DOS 4.0
  1618.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  1619.       have the block header program name field set to "UMB"; blocks whose
  1620.       "owner" field is set to the QEMM/QRAM code segment returned in DX
  1621.       are locked out regions such as video memory and ROMs.
  1622. ----------2FD201BX4D41-----------------------
  1623. INT 2F U - Quarterdeck - MANIFEST v1.0+ - INSTALLATION CHECK
  1624.     AX = D201h
  1625.     BX = 4D41h ("MA")
  1626.     CX = 4E49h ("NI")
  1627.     DX = 4645h ("FE")
  1628. Return: BX = 5354h ("ST")
  1629. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1630.       through FFh, then C0h through D1h
  1631. ----------2FD201BX4D45-----------------------
  1632. INT 2F U - Quarterdeck - DVDOS4GX.DVR - ???
  1633.     AX = D201h
  1634.     BX = 4D45h ("ME")
  1635.     CX = 5155h ("QU")
  1636.     DX = 5044h ("PD")
  1637. Return: ???
  1638. Notes:    AH=D2h is the default; use the Quarterdeck installation check described
  1639.       under AX=D200h
  1640.     called by QEMM 6.03
  1641. ----------2FD201BX5145-----------------------
  1642. INT 2F U - Quarterdeck - QEMM v5.0+ - INSTALLATION CHECK
  1643.     AX = D201h
  1644.     BX = 5145h ("QE")
  1645.     CX = 4D4Dh ("MM")
  1646.     DX = 3432h ("42")
  1647. Return: BX = 4F4Bh ("OK")
  1648.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  1649. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1650.       through FFh, then C0h through D1h
  1651.     this call is not available under QEMM v6.00 unless Windows3 support
  1652.       has been disabled with the NW3 switch to QEMM386.SYS
  1653. SeeAlso: AX=D201h/BX=4849h,INT 67/AH=3Fh
  1654. ----------2FD201BX5649-----------------------
  1655. INT 2F U - Quarterdeck - VIDRAM v5.0+ - INSTALLATION CHECK
  1656.     AX = D201h
  1657.     BX = 5649h ("VI")
  1658.     CX = 4452h ("DR")
  1659.     DX = 414dh ("AM")
  1660. Return: BX = 4F4Bh ("OK")
  1661.     ES:DI -> VIDRAM entry point
  1662. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  1663.       through FFh, then C0h through D1h
  1664.  
  1665. Call VIDRAM entry point with:
  1666.     AH = 00h get status
  1667.         Return: AL = VIDRAM state (see below)
  1668.             BL = extra RAM status
  1669.                 00h VIDRAM does not use extra RAM
  1670.                 01h VIDRAM uses EMS as extra RAM
  1671.                 02h VIDRAM uses EGA as extra RAM
  1672.             BH = feature flags
  1673.                 bit 0: override enabled
  1674.                 bit 1: mapped memory detected in A000h-B000h range
  1675.                 bit 2: top of memory not at 640K
  1676.                 bit 3: MDA detected
  1677.                 bit 4: high RAM exists in video area
  1678.                 bit 5: mapped memory detected in video area
  1679.                 bits 6-7: reserved???
  1680.             CL = current monitor (01h = mono, 80h = color)
  1681.             SI = current top of memory (paragraph)
  1682.             DI = segment of start of HiRAM chain
  1683.     AH = 01h setup
  1684.         AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
  1685.         BL = extra RAM status (see above)
  1686.         BH = feature flags (see above)
  1687.         CL = monitor (01h = monochrome, 80h = color)
  1688.         SI = new top of memory (paragraph)
  1689.         DI = segment of start of HiRAM chain
  1690.     AH = 02h get end address of VIDRAM code
  1691.         Return: ES:DI -> VIDRAM partial map context (see below)
  1692. Return: CF set on error
  1693.     CF clear if successful
  1694.  
  1695. Format of partial map context (EMS 3.2):
  1696. Offset    Size    Description
  1697.  00h    BYTE    EMS version ID (32h)
  1698.  01h    WORD    EMM handle for this entry
  1699.  03h    BYTE    number of frames
  1700.  04h    BYTE    first page frame
  1701.  05h    WORD    offset from ES to previously saved map
  1702.  
  1703. Format of partial map context (EMS 4.0):
  1704. Offset    Size    Description
  1705.  00h    BYTE    EMS version ID (40h)
  1706.  01h    WORD    mappable segment count
  1707.  03h  N WORD    mappable segments
  1708.     WORD    offset to previously saved map???
  1709. ----------2FD300BX4562-----------------------
  1710. INT 2F U - TeleReplica - INSTALLATION CHECK
  1711.     AX = D300h
  1712.     BX = 4562h
  1713.     CX = 2745h
  1714.     DX = serial port I/O base address??? (03F8h for v3.9)
  1715. Return: SI = segment of resident code
  1716.     AX = 251Dh
  1717.     BX = DF21h
  1718.     CX = F321h
  1719.     DX = ???
  1720. ----------2FD3CB-----------------------------
  1721. INT 2F U - LapLink Quick Connect v6 - API
  1722.     AX = D3CBh
  1723.     CX = function
  1724.         0002h get ???
  1725.         Return: BX:AX -> ???
  1726.             CL = ???
  1727.             CH = ???
  1728.             DX = ???
  1729.             DI = COM1 I/O port???
  1730.             SI = COM2 I/O port???
  1731.         0003h initialization???
  1732.         0004h ???
  1733.         0005h initialization???
  1734.         0006h reset/clear ???
  1735.         Return: AX = 0000h
  1736.             ES:DI -> next byte after ??? cleared by this call
  1737.         0007h initialization???
  1738.         0008h uninstall
  1739.         Return: BX = status
  1740.                 0000h successful
  1741.                 FFFFh incomplete, stub remains in memory
  1742. Return: CX = 534Bh (except function 0002h)
  1743. ----------2FD44D-----------------------------
  1744. INT 2F - 4DOS.COM v2.1+ - API
  1745.     AX = D44Dh
  1746.     BH = function
  1747.         00h installation check
  1748.         Return: AX = 44DDh
  1749.             BL = minor version number
  1750.             BH = major version number
  1751.             CX = PSP segment address for current invocation
  1752.             DL = 4DOS shell number (0 for the first (root) shell,
  1753.                  updated each time a new copy is loaded)
  1754.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  1755.         Return: nothing
  1756.         (internal, v4.0) ???
  1757.         Return: ES:BX -> data area (see below)
  1758.         02h ???
  1759.         DX = ???
  1760.     ---v2.1-3.03 only---
  1761.         03h EXEC program
  1762.         CX:DX -> EXEC record
  1763.         FEh deallocate shell number (passed through to root shell)
  1764.         ???
  1765.         FFh allocate shell number (passed through to root shell)
  1766. Note:    bug in v3.00 will crash system if unrecognized value in BH
  1767. SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h
  1768.  
  1769. Format of EXEC record:
  1770. Offset    Size    Description
  1771.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  1772.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  1773.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  1774.  
  1775. Format of 4DOS v4.0 data area:
  1776. Offset    Size    Description
  1777.  00h  2 BYTEs    ???
  1778.  06h    WORD    XMS handle for swapping
  1779.     ???
  1780. ----------2FD44E-----------------------------
  1781. INT 2F - 4DOS v3.0+ - AWAITING USER INPUT
  1782.     AX = D44Eh
  1783. ---4DOS v3.01+---
  1784.     BX = 0000h 4DOS is ready to display prompt
  1785.        = 0001h 4DOS has displayed the prompt, about to accept user input
  1786. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  1787. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  1788. SeeAlso: AX=D44Dh
  1789. ----------2FD44FBX0000-----------------------
  1790. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  1791.     AX = D44Fh
  1792.     BX = 0000h
  1793. Return: AX = 44DDh if installed
  1794. SeeAlso: AX=D44Fh/BX=0001h
  1795. ----------2FD44FBX0001-----------------------
  1796. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  1797.     AX = D44Fh
  1798.     BX = 0001h
  1799.     CX = number of keystrokes (01h-FFh)
  1800.     DS:DX -> keystroke list (one word per keystroke)
  1801. Return: AX = status
  1802.         0000h successful
  1803.         nonzero failed
  1804.     BX,CX,DX destroyed
  1805. Notes:    the keystrokes are the exact values to return from subsequent calls to
  1806.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  1807.         0000h causes subfunctions 01h and 11h to indicate an empty
  1808.             keyboard buffer
  1809.         FFFFh is followed by a word indicating the number of clock
  1810.             ticks to delay before the next faked keystroke
  1811.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  1812.       invocation, and does not range-check CX; it will overwrite memory
  1813.       following the resident portion if CX is greater than 100h.
  1814. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  1815. ----------2FD600-----------------------------
  1816. INT 2F - HEART.COM - INSTALLATION CHECK
  1817.     AX = D600h
  1818. Return: AX = 0303h (two hearts) if installed
  1819.         ES:DI -> buffer (see below)
  1820. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  1821. Notes:    Once the host program has identified the address of the data area, it
  1822.       can change this to indicate safe/critical, alternate colours, etc.
  1823.     The entries for the color table are in char/attrib form.  Every two
  1824.       entries form a pair which is alternated between 68 times a minute.
  1825.       The first half of the table is for color videos, the second mono.
  1826.       Within each half, the first half is for the safe chars, and the
  1827.       second for the critical chars.
  1828.  
  1829. Format of buffer:
  1830. Offset    Size    Description
  1831.  00h  8 WORDs    table of colors/attributes (see notes above)
  1832.  10h    BYTE    flags
  1833.         bit 0: program is in critical section, so flash double
  1834.             exclamation mark
  1835.         bit 1: program is in safe code, so flash the heart character
  1836.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  1837.         of second line)
  1838. ----------2FD600-----------------------------
  1839. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  1840.     AX = D600h
  1841. Return: AL = D6h if installed
  1842. Note:    VSWAP is the resident portion of VEDIT's "swapper" capability.
  1843.     VEDIT is a programmer's text editor by Greenview Data.
  1844. SeeAlso: AX=D601h,AX=D602h
  1845. ----------2FD601-----------------------------
  1846. INT 2F U - VEDIT VSWAP - ???
  1847.     AX = D601h
  1848.     BL = subfunction number???
  1849. Return: BL = return code ???
  1850.     ES = resident portion's data??? segment
  1851.     DX = resident portion's code segment
  1852. SeeAlso: AX=D600h"VSWAP"
  1853. ----------2FD602-----------------------------
  1854. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  1855.     AX = D602h
  1856.     other registers set as for INT 21/AX=4B00h
  1857. Return: CF set on error
  1858.         AL = error code
  1859.         82h = failure due to ???
  1860.     CF clear on success
  1861. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  1862. ----------2FD701-----------------------------
  1863. INT 2F - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER
  1864.     AX = D701h
  1865.     BX = 0000h
  1866. Return: AX = 0000h installed
  1867.         BX = interrupt number (60h to 66h)
  1868.        nonzero not present
  1869. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  1870.       necessary to examine the four bytes preceding the handlers for
  1871.       INT 60 through INT 66 for the string "BANV"
  1872. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  1873. ----------2FD702-----------------------------
  1874. INT 2F U - BANYAN VINES v4+ - PCPRINT interface
  1875.     AX = D702h
  1876.     BX = function
  1877.     ???
  1878. Return: ???
  1879. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  1880. ----------2FD703-----------------------------
  1881. INT 2F U - BANYAN VINES v4+ - MAIL interface
  1882.     AX = D703h
  1883.     BX = function
  1884.     ???
  1885. Return: ???
  1886. SeeAlso: AX=D702h,AX=D704h
  1887. ----------2FD704-----------------------------
  1888. INT 2F U - BANYAN VINES v4+ - Streettalk Directory Assistance interface
  1889.     AX = D704h
  1890.     BX = function
  1891.     ???
  1892. Return: ???
  1893. SeeAlso: AX=D703h,INT 61/AX=0007h"Banyan"
  1894. ----------2FD800-----------------------------
  1895. INT 2F - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  1896.     AX = D800h
  1897. Return:    AL = FFh if installed
  1898.         DX = version number??? (0100h in 1.00)
  1899.         BX = data segment of resident copy???
  1900.         ES:DI = FAR entry point for API routines
  1901.             Load BX = function number and call for various
  1902.             functions.    Functions 00h - 10h supported in 1.00.
  1903. SeeAlso: AX=7A00h,AX=D880h
  1904. ----------2FD880-----------------------------
  1905. INT 2F - Novell NetWare Lite - SERVER.EXE - INSTALLATION CHECK
  1906.     AX = D880h
  1907. Return:    AL = FFh if installed
  1908.         DX = version number??? (0100h in 1.00)
  1909.         BX = Data segment of resident copy???
  1910.         CL = 01h if SERVER is active
  1911.            = 00h if SERVER is disabled
  1912. SeeAlso: AX=7A00h,AX=D800h
  1913. ----------2FDA00-----------------------------
  1914. INT 2F - ZyXEL ZFAX - INSTALLATION CHECK
  1915.     AX = DA00h
  1916. Return: AH = enabled state (00h = enabled, 01h = disabled)
  1917.     AL = 5Ah installed
  1918. Note:    ZFAX is the bundled FAX software which comes with the ZyXEL model
  1919.       fax modems.
  1920. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h
  1921. ----------2FDA01-----------------------------
  1922. INT 2F - ZyXEL ZFAX - UNINSTALL
  1923.     AX = DA01h
  1924. Return: AL = 00h Success
  1925.          01h Failure
  1926. SeeAlso: AX=DA00h
  1927. ----------2FDA02-----------------------------
  1928. INT 2F - ZyXEL ZFAX - DISABLE
  1929.     AX = DA02h
  1930. Return: AL = 00h
  1931. SeeAlso: AX=DA03h
  1932. ----------2FDA03-----------------------------
  1933. INT 2F - ZyXEL ZFAX - ENABLE
  1934.     AX = DA03h
  1935. Return: AL = 00h
  1936. SeeAlso: AX=DA02h
  1937. ----------2FDA55-----------------------------
  1938. INT 2F U - TRAP.COM - INSTALLATION CHECK
  1939.     AX = DA55h
  1940.     DL = interrupt number
  1941.     DH = ???
  1942. Return: if installed
  1943.         AH = interrupt number
  1944.         AL = ???
  1945.         ES:BX -> ???
  1946. Notes:    TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  1947.     a separate copy of TRAP is loaded for each interrupt to be traced; thus
  1948.       the interrupt number is part of the installation check
  1949. ----------2FDC00-----------------------------
  1950. INT 2F - GOLD.COM - INSTALLATION CHECK
  1951.     AX = DC00h
  1952. Return: AL = 00h not installed
  1953.        = FFh installed
  1954. Note:    GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  1955.       for F1; the purpose is to improve Kermit's VTxxx emulation
  1956. ----------2FDC01-----------------------------
  1957. INT 2F - GOLD.COM - GET STATE
  1958.     AX = DC01h
  1959. Return:    AL = status
  1960.         00h off
  1961.         01h on
  1962. SeeAlso: AX=DC00h,AX=DC02h
  1963. ----------2FDC02-----------------------------
  1964. INT 2F - GOLD.COM - SET STATE
  1965.     AX = DC02h
  1966.     DL = new state
  1967.         00h off
  1968.         01h on
  1969. Return: AL = 00h (OK)
  1970. SeeAlso: AX=DC01h
  1971. ----------2FDD-------------------------------
  1972. INT 2F - SoftCom programs - API
  1973.     AH = DDh
  1974.     AL = FEh get info
  1975.         Return: ES:BX -> TSR info list (see below)
  1976.     AL = program identifier
  1977.         BH = function
  1978.         FDh get version
  1979.             Return: BX = version
  1980.         FFh installation check
  1981.             Return: AL = FFh if installed
  1982.                 BX = version
  1983.                 ES = segment of resident code
  1984.         others vary by program
  1985. Return: AL = status
  1986.         bit 7 set on error
  1987.         AL = 81h unknown function
  1988.  
  1989. Format of TSR info list:
  1990. Offset    Size    Description
  1991.  00h  9 BYTEs    blank-padded ASCIZ program name
  1992.  09h    BYTE    program ID
  1993.  0Ah    WORD    program's PSP segment
  1994.  0Ch    WORD    program version (major in high byte)
  1995.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  1996.  12h    BYTE    number of interrupts hooked
  1997.  13h  5 BYTEs    interrupt numbers hooked by program
  1998.  18h  8 BYTEs    reserved
  1999. ----------2FDE00BX4445-----------------------
  2000. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  2001.     AX = DE00h
  2002.     BX = 4445h ("DE")
  2003.     CX = 5844h ("XD")
  2004.     DX = 4931h ("I1")
  2005. Return: AL = FFh if installed (even if other registers do not match)
  2006.     if BX,CX, and DX were as specified on entry,
  2007.         BX = 4845h ("HE")
  2008.         CX = 5245h ("RE")
  2009.         DX = 4456h ("DV")
  2010. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  2011.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  2012.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  2013.       issue DESQview API calls other than those allowed from hardware ints
  2014. SeeAlso: AX=DE02h,INT 15/AX=5400h
  2015. ----------2FDE01-----------------------------
  2016. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  2017.     AX = DE01h
  2018.     BX = driver ID
  2019.     other registers as needed by driver
  2020. Notes:    XDI drivers should pass this call through to previous handler if ID
  2021.       does not match
  2022.     DESQview never calls this function
  2023. ----------2FDE01BX4450-----------------------
  2024. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  2025.     AX = DE01h
  2026.     BX = 4450h ("DP")
  2027.     CX = 4D49h ("MI")
  2028.     DX = 3039h ("09")
  2029. Return: AL = FFh if installed
  2030.         BX = 4D42h ("MB")
  2031.         CX = 4921h ("I!")
  2032.         DX = 8F4Fh
  2033.         ES:DI -> filename of DPMI host overlay
  2034. Note:    the installation check consists of testing for the existence of the
  2035.       character device QDPMI$$$
  2036. ----------2FDE01BX5242-----------------------
  2037. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  2038.     AX = DE01h
  2039.     BX = 5242h ("RB")
  2040.     CX:DX = program identifier
  2041.         656F7000h ("eop",0) for DVeop
  2042. Return: AX = 5242h ("RB") if installed
  2043.         ES:BX -> data or entry point
  2044.         CX = version number (CH = major, CL = minor)
  2045.  
  2046. Call DVeop entry point with:
  2047.     ES:DI -> callback address or 0000h:0000h to remove callback
  2048. Return: AX = status
  2049.         0000h failed (callback table full or attempted to remove non-
  2050.             existent callback)
  2051.         0001h successful
  2052.         ES:DI -> chaining address
  2053.     BX,CX,DX destroyed
  2054. Notes:    the callback function is called with a simulated interrupt when the
  2055.       DESQview window containing it is closed; it should perform all
  2056.       necessary cleanup and then perform a FAR jump to the chaining address
  2057.       or an IRET if the chaining address is 0000h:0000h
  2058.     if the program wishes to remove itself before the window is closed, it
  2059.       should call the DVeop entry point with the previously returned
  2060.       chaining address and ignore the returned chaining address.
  2061. ----------2FDE01BX7474-----------------------
  2062. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  2063.     AX = DE01h
  2064.     BX = 7474h
  2065.     CL = function
  2066.         00h installation check
  2067.         Return: AL = FFh
  2068.         01h get process handle
  2069.         DX = keys on Open Window menu (DL = first, DH = second)
  2070.         Return: AX = process handle or 0000h if not running
  2071.         02h (v1.3+) set TMAN handle
  2072.         DX = TMAN process handle
  2073.         03h (v1.3+) set open keys to ignore on next CL=01h call
  2074.         DX = keys on Open Window menu (DL = first, DH = second)
  2075. Return: BX = 4F4Bh ("OK")
  2076.     DL destroyed
  2077. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  2078.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  2079. ----------2FDE01BX7575-----------------------
  2080. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  2081.     AX = DE01h
  2082.     BX = 7575h
  2083.     CX = function
  2084.         0000h installation check
  2085.         Return: AX = 00FFh if installed
  2086.         0001h turn on notification (currently unused)
  2087.         Return: AX = 0001h
  2088.         0002h turn off notification (currently unused)
  2089.         Return: AX = 0001h
  2090.         0003h get process information
  2091.         Return: AX = status
  2092.                 0000h failed
  2093.                 0001h successful
  2094.                 BX = last instantaneous time slice
  2095.                     in 1/100s (v1.10)
  2096.                     in 1/18s (v1.11+)
  2097.                 CX = number of processes
  2098.                 DX = number of "(starting)" records (v2.00+)
  2099.                 SI = number of records in process info array
  2100.                      (v2.00+) (always 15 for v1.x)
  2101.                 ES:DI -> process info array (see below)
  2102.         0004h get version
  2103.         Return: AH = major version
  2104.             AL = minor version
  2105.         0005h (v1.10+) get time since DESQview started
  2106.         Return: DX:AX = 1/100s since DV start (v1.10)
  2107.             DX:AX = 1/18s since DV start (v1.11+)
  2108.         0006h (v1.10+) get number of task switches
  2109.         Return: DX:AX = total task switches
  2110.             CX = task switches in last instantaneous interval
  2111. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  2112.       Daniel J. Bodoh
  2113.     for v1.00, function 0003h allocates common memory, which the caller
  2114.       must deallocate after reading the process information; only the
  2115.       currently used records are placed in the buffer
  2116.     for v1.10+, function 0003h merely returns a pointer to the internal
  2117.       array of process information; the caller should make a copy of the
  2118.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  2119.       those records with bit 7 of the first byte set are valid.
  2120.  
  2121. Format of information for one process (v1.00):
  2122. Offset    Size    Description
  2123.  00h    BYTE    flags
  2124.         bit 7: process slot is valid
  2125.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  2126.         Open Windows menu, else undefined
  2127.  03h    WORD    Switch Windows window number
  2128.  05h    WORD    segment of process handle
  2129.  07h    WORD    number of tasks owned by process
  2130.  09h    WORD    mapping context of process
  2131.  0Bh    DWORD    hook for other programs
  2132.  
  2133. Format of information for one process (v1.10-v2.00):
  2134. Offset    Size    Description
  2135.  00h    BYTE    flags
  2136.         bit 7: valid record
  2137.             6: (v2.00+) record is allocated; if bit 7 clear, process
  2138.             is "(starting)" and only offsets 01h and 09h are valid
  2139.             5: (v2.00+) this app currently owns the CPU
  2140.             4: reserved (0)
  2141.             3: DESQview system task
  2142.             2: reserved (0)
  2143.             1: task has keyboard (currently unused)
  2144.             0: task swapped out (currently unused)
  2145.  01h    WORD    Open Window keys
  2146.  03h    WORD    Switch Windows number
  2147.  05h    WORD    segment of process handle
  2148.  07h    WORD    number of tasks for process
  2149.  09h    WORD    process mapping context
  2150.  0Bh    DWORD    time process started (relative to start of DESQview)
  2151.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  2152.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  2153.  17h    DWORD    total CPU time since process started
  2154.  1Bh    DWORD    CPU time at start of current instantaneous interval
  2155.  1Fh    DWORD    CPU time in current instantaneous interval
  2156.  23h    DWORD    hook for other programs
  2157. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  2158. ----------2FDE01BXFFFE-----------------------
  2159. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  2160.     AX = DE01h
  2161.     BX = FFFEh
  2162.     CX = 4D47h ("MG")
  2163.     DX = 0052h (0,"R")
  2164. Return: AL = FFh
  2165.     DX = 584Dh
  2166. ----------2FDE02-----------------------------
  2167. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  2168.     AX = DE02h
  2169.     BX = mapping context of DESQview
  2170.     DX = handle of DESQview system task
  2171. Note:    driver should pass this call to previous handler after doing its work
  2172. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  2173. ----------2FDE03-----------------------------
  2174. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  2175.     AX = DE03h
  2176.     BX = mapping context of DESQview
  2177.     DX = handle of DESQview system task
  2178. Notes:    driver should pass this call to previous handler before doing its work
  2179.     DESQview makes this call when it is exiting, but before unhooking any
  2180.       interrupt vectors
  2181. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  2182. ----------2FDE04-----------------------------
  2183. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  2184.     AX = DE04h
  2185.     BX = mapping context of new process
  2186.     DX = handle of process
  2187. Return: nothing
  2188. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  2189.       (see below) from "common" memory to control access to XMS memory
  2190.     all DOS, BIOS, and DV API calls are valid in handler
  2191.     driver should pass this call to previous handler after processing it
  2192. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  2193.  
  2194. Format of XMS XDI structure:
  2195. Offset    Size    Description
  2196.  00h    DWORD    pointer to 10-byte record???
  2197.  04h    DWORD    pointer to next XMS XDI structure
  2198.  08h    WORD    mapping context
  2199.  0Ah    BYTE    ???
  2200.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  2201.         (FAR jump to next field)
  2202.  10h  6 BYTEs    FAR handler for XMS driver entry point
  2203.         (consists of a FAR CALL followed by RETF)
  2204. ----------2FDE05-----------------------------
  2205. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  2206.     AX = DE05h
  2207.     BX = mapping context of process
  2208.     DX = handle of last task in process
  2209. Return: nothing
  2210. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  2211.     driver should pass this call to previous handler before processing it
  2212.     all DOS, BIOS, and DV API calls except those generating a task switch
  2213.       are valid in handler
  2214. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  2215. ----------2FDE06-----------------------------
  2216. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  2217.     AX = DE06h
  2218.     BX = mapping context of process containing task
  2219.     DX = handle of new task
  2220. Notes:    driver should pass this call to previous handler after processing it
  2221.     all DOS, BIOS, and DV API calls are valid in handler
  2222. ----------2FDE07-----------------------------
  2223. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  2224.     AX = DE07h
  2225.     BX = mapping context of process containing task
  2226.     DX = handle of task
  2227. Notes:    driver should pass this call to previous handler before processing it
  2228.     all DOS, BIOS, and DV API calls except those generating a task switch
  2229.       are valid in handler
  2230. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  2231. ----------2FDE08-----------------------------
  2232. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  2233.     AX = DE08h
  2234.     BX = mapping context of task being switched from
  2235.     DX = handle of task being switched from
  2236. Notes:    invoked prior to task swap, interrupts, etc
  2237.     driver should pass this call to previous handler after processing it
  2238. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  2239. ----------2FDE09-----------------------------
  2240. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  2241.     AX = DE09h
  2242.     BX = mapping context of task being switched to
  2243.     DX = handle of task being switched to
  2244. Notes:    state is restored except for interrupts
  2245.     driver should pass this call to previous handler before processing it
  2246. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  2247. ----------2FDE0A-----------------------------
  2248. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  2249.     AX = DE0Ah
  2250.     BX = mapping context of task receiving focus
  2251.     DX = handle of running task
  2252. Notes:    driver should pass this call to previous handler before processing it
  2253.     this call often occurs inside a keyboard interrupt
  2254. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  2255. ----------2FDE0B-----------------------------
  2256. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  2257.     AX = DE0Bh
  2258.     BX = mapping context of DESQview system task
  2259.     CX = number of system memory paragraphs required for the use of all
  2260.         XDI drivers (DV will add this to system memory in DVP buffer)
  2261.     DX = handle of DESQview system task
  2262.     SI = mapping context of new process if it starts
  2263.     ES:DI -> DVP buffer
  2264. Return: CX incremented as needed
  2265. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  2266.     driver should pass this call to previous handler before processing it
  2267. ----------2FDE0C-----------------------------
  2268. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  2269.     AX = DE0Ch
  2270.     BX = mapping context of task being swapped out
  2271.     DX = handle of DESQview system task
  2272. Note:    driver should pass this call to previous handler after processing it
  2273. ----------2FDE0D-----------------------------
  2274. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  2275.     AX = DE0Dh
  2276.     BX = mapping context of process just swapped in
  2277.     DX = handle of DESQview system task
  2278. Note:    driver should pass this call to previous handler before processing it
  2279. ----------2FDE0E-----------------------------
  2280. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  2281.     AX = DE0Eh
  2282.     BX = mapping context of DESQview system task
  2283.     DX = handle of DESQview system task
  2284.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2285. Note:    driver should pass this call to previous handler after processing it
  2286. ----------2FDE0F-----------------------------
  2287. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  2288.     AX = DE0Fh
  2289. Note:    DESQview 2.50+ calls this function just before it completes its
  2290.       initialization.  At the time of the call, DESQview has not yet
  2291.       changed any interrupt vectors
  2292. SeeAlso: AX=DE02h
  2293. ----------2FDE10-----------------------------
  2294. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  2295.     AX = DE10h
  2296.     BX = mapping context of process
  2297.     DX = task handle of process
  2298. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  2299.       similar to AX=DE07h but allows the XDI handler to make calls which
  2300.       cause context switches
  2301. SeeAlso: AX=DE06h,AX=DE07h
  2302. ----------2FDF00-----------------------------
  2303. INT 2F - HyperWare programs - INSTALLATION CHECK
  2304.     AX = DF00h
  2305.     BX = product code
  2306.         4248h ('BH') HyperStb
  2307.         4448h ('DH') HyperDisk v4.20+
  2308.         4B48h ('KH') HyperKey
  2309.         5348h ('SH') HyperScreen
  2310.     CX = 0000h
  2311.     DX = 0000h
  2312. Return: AL = status
  2313.         00h not installed
  2314.         FFh multiplex number in use
  2315.         CX = 5948h ('YH') if selected product installed
  2316.         ---HyperDisk---
  2317.         BX = code segment of resident portion
  2318.         DX = HyperDisk local data version
  2319. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2320. Note:    AH=DFh is the default; if it is already in use by some other program,
  2321.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2322. SeeAlso: INT 13/AX=8EEDh
  2323. ---------------------------------------------
  2324. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  2325.     AX = DF01h
  2326.     BX = 4448h ('DH')
  2327. Return: AX = 0000h if function supported
  2328.         BX = number of cache buffers in use
  2329.         CX = number of cache buffers which have been modified
  2330.         DL = caching flags (see below)
  2331. Note:    AH=DFh is the default; if it is already in use by some other program,
  2332.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2333. SeeAlso: AX=DF00h,AX=DF02h
  2334.  
  2335. Bitmask of caching flags:
  2336.  bit 0: staged writes enabled for floppy disks
  2337.  bit 1: staged writes enabled for hard disks
  2338.  bit 2: writes verified on floppy disks
  2339.  bit 3: writes verified on hard disks
  2340.  bit 4: reserved (0)
  2341.  bit 5: reserved (0)
  2342.  bit 6: floppy caching enabled
  2343.  bit 7: all caching functions enabled
  2344. ---------------------------------------------
  2345. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  2346.     AX = DF02h
  2347.     BX = 4448h ('DH')
  2348.     DL = new caching flags (see AX=DF01h)
  2349. Return: AX = 0000h if supported
  2350.         BX = number of cache buffers in use
  2351.         CX = number of cache buffers which have been modified
  2352.         DL = previous caching flags (see AX=DF01h)
  2353. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2354. Note:    AH=DFh is the default; if it is already in use by some other program,
  2355.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2356. SeeAlso: AX=DF00h,AX=DF01h
  2357. ----------2FE000-----------------------------
  2358. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  2359.     AX = E000h
  2360. Return: AX = 4A52h ("JR") if present
  2361. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  2362.       apparent DOS version analogously to MSDOS SETVER
  2363. Note:    this installation check differs from the usual one of returning AL=FFh
  2364. SeeAlso: AX=E001h,INT 21/AH=52h
  2365. ----------2FE001-----------------------------
  2366. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  2367.     AX = E001h
  2368. Return: AH = major version
  2369.     AL = minor version
  2370. SeeAlso: AX=E000h
  2371. ----------2FE002-----------------------------
  2372. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  2373.     AX = E002h
  2374. Return: AL = FFh if successful
  2375.         BH = major DOS version
  2376.         BL = minor DOS version
  2377.         CH = DOS version flag
  2378.         CL = OEM number
  2379.         DH = major DR-DOS version number (FFh if unknown)
  2380.         DL = minor DR-DOS version number (FFh if unknown)
  2381. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  2382. ----------2FE003-----------------------------
  2383. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  2384.     AX = E003h
  2385.     BH = new major DOS version
  2386.     BL = new minor DOS version
  2387.     CH = new DOS version flag
  2388.     CL = new DOS revision number
  2389.     DH = new OEM number
  2390. SeeAlso: AX=E002h
  2391. ----------2FE004-----------------------------
  2392. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  2393.     AX = E004h
  2394. Return: AL = FFh if successful
  2395. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  2396. ----------2FE005-----------------------------
  2397. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  2398.     AX = E005h
  2399. Return: AL = FFh if successful
  2400. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  2401. ----------2FE006-----------------------------
  2402. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  2403.     AX = E006h
  2404. Return: AL = FFh if successful
  2405.         BL = status
  2406.         01h resident and active
  2407.         02h resident and inactive
  2408. ----------2FE007-----------------------------
  2409. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  2410.     AX = E007h
  2411. Return: AL = FFh if successful
  2412.         BL = status
  2413.         00h if TaskMAX not loaded before SETDRVER
  2414.         FFh if TaskMAX was loaded before SETDRVER
  2415. SeeAlso: AX=E003h
  2416. ----------2FE0-------------------------------
  2417. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  2418.     AH = E0h
  2419.     AL = 08h-10h
  2420. ----------2FE300-----------------------------
  2421. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  2422.     AX = E300h
  2423. Return: AL = 00h not installed
  2424.          FEh if installed but suspended (v3.0+)
  2425.          FFh installed
  2426. Notes:    ANARKEY.COM is a commandline recall program by Steven Calwas
  2427.     E3h is the default function number, but can be set to any value from
  2428.       C0h to FFh
  2429. SeeAlso: AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h,AX=E307h
  2430. ----------2FE301-----------------------------
  2431. INT 2F U - ANARKEY.COM v2+ - GET ???
  2432.     AX = E301h
  2433. Return: DX:BX -> ???
  2434. SeeAlso: AX=E300h
  2435.  
  2436. Format of returned data structure for ANARKEY v2.0:
  2437. Offset    Size    Description
  2438.  -7   7 BYTEs    signature ('ANARKEY')
  2439.  00h    WORD    ??? (I see 0001h in v2.0)
  2440.  02h    WORD    ??? (I see 0001h in v2.0)
  2441.  04h    WORD    ??? (I see 0 in v2.0)
  2442.  06h    WORD    PSP segment of next program loaded
  2443.  
  2444. Format of returned data structure for ANARKEY v3+:
  2445. Offset    Size    Description
  2446.  -1    BYTE    multiplex number
  2447.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  2448.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  2449.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  2450.  05h    WORD    PSP segment of next program loaded
  2451. ----------2FE302-----------------------------
  2452. INT 2F U - ANARKEY.COM v3+ - ???
  2453.     AX = E302h
  2454.     BL = ???
  2455. Return: ???
  2456. SeeAlso: AX=E300h
  2457. ----------2FE303-----------------------------
  2458. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  2459.     AX = E303h
  2460.     BL = function
  2461.         01h    toggle insert mode
  2462.         02h    display contents of history buffer
  2463.         03h    write history buffer to file
  2464.         ES:DX -> file name
  2465.         04h    clear history buffer
  2466.         05h    undefine all aliases
  2467.         06h    show aliases
  2468.         07h    list programs using Unix switchar
  2469.         08h    jump to bottom of history buffer    
  2470.         09h (v4.0) add string to history buffer
  2471.         ES:DX -> ASCIZ string
  2472.         0Ah (v4.0) ???
  2473.         ES:DX -> ???
  2474.         0Bh (v4.0) copy string to edit buffer for use as next input line
  2475.         ES:DX -> ASCIZ string
  2476.         0Ch (v4.0) ???
  2477.         0Dh (v4.0) copy ??? to ???
  2478.         0Eh (v4.0) ???
  2479.         0Fh (v4.0) ???
  2480.         10h (v4.0) set ??? flag
  2481.         11h (v4.0) display error message about running in EMS under Windows
  2482. Return: ???
  2483. SeeAlso: AX=E300h
  2484. ----------2FE304-----------------------------
  2485. INT 2F U - ANARKEY.COM v2+ - ???
  2486.     AX = E304h
  2487.     BL = ???
  2488. Return: ???
  2489. SeeAlso: AX=E300h
  2490. ----------2FE305-----------------------------
  2491. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  2492.     AX = E305h
  2493.     BL = new state
  2494.         01h suspended
  2495.         00h enabled
  2496. SeeAlso: AX=E300h
  2497. ----------2FE306-----------------------------
  2498. INT 2F U - ANARKEY.COM v4.0 - GET ???
  2499.     AX = E306h
  2500. Return: AX = ???
  2501. SeeAlso: AX=E300h
  2502. ----------2FE307-----------------------------
  2503. INT 2F U - ANARKEY.COM v4.0 - GET ???
  2504.     AX = E307h
  2505. Return: AX = ???
  2506.     BL = ???
  2507. SeeAlso: AX=E300h
  2508. ----------2FE44D-----------------------------
  2509. INT 2F - NDOS - API
  2510.     AX = E44Dh
  2511. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  2512.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  2513.       check returns AX=44EEh instead of AX=44DDh
  2514. SeeAlso: AX=D44Dh,AX=E44Eh
  2515. ----------2FE44EBX0000-----------------------
  2516. INT 2F - NDOS - AWAITING USER INPUT
  2517.     AX = E44Eh
  2518.     BX = 0000h NDOS is ready to display prompt
  2519.        = 0001h NDOS has displayed the prompt, about to accept user input
  2520. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  2521. SeeAlso: AX=E44Dh
  2522. ----------2FED00-----------------------------
  2523. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  2524.     AX = ED00h
  2525.     BL = DOS extender
  2526.         01h 286dosx v1.3+ (Software Development Kit)
  2527.         02h 286dosx v1.3+ (Run-Time Kit)
  2528.         03h 386dosx v4.0+ (SDK)
  2529.         04h 386dosx v4.0+ (RTK)
  2530. Return: AL = status
  2531.         00h not installed
  2532.         FFh installed
  2533.         SI = 5048h ("PH")
  2534.         DI = 4152h ("AR")
  2535.         CH = major version number
  2536.         CL = minor version number
  2537.         DX = flags
  2538.             bit 0: running under DPMI
  2539.             1: running under Phar Lap VMM
  2540. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  2541. ----------2FED80-----------------------------
  2542. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  2543.     AX = ED80h
  2544.     BL = DOS extender ID (see AX=ED00h)
  2545.     SI = 5048h ("PH")
  2546.     DI = 4152h ("AR")
  2547.     ???
  2548. Return: ???
  2549. ----------2FEE00-----------------------------
  2550. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  2551.     AX = EE00h
  2552. Return: AL = FFh if installed
  2553. Note:    GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  2554. ----------2FF000-----------------------------
  2555. INT 2F U - 4MAP - INSTALLATION CHECK
  2556.     AX = F000h
  2557. Return: AX = 00FFh
  2558. Notes:    returns AX=00FFh for any value of AL not listed here
  2559.     4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  2560. ----------2FF001-----------------------------
  2561. INT 2F U - 4MAP - GET KEY MAPPINGS
  2562.     AX = F001h
  2563. Return: ES:BX -> key mappings
  2564. SeeAlso: AX=F000h
  2565. ----------2FF002-----------------------------
  2566. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  2567.     AX = F002h
  2568.     BL = character to insert
  2569. Return: AX = status
  2570.         0000h successful
  2571.         0001h buffer full
  2572. SeeAlso: AX=F000h,AX=F003h
  2573. ----------2FF003-----------------------------
  2574. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  2575.     AX = F003h
  2576.     BL = character to insert
  2577. Return: AX = status
  2578.         0000h successful
  2579.         0001h buffer full
  2580. SeeAlso: AX=F000h,AX=F002h
  2581. ----------2FF1-------------------------------
  2582. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  2583.     AH = F1h
  2584.     AL <> F1h
  2585. Return: AL = F1h if installed
  2586. Note:    MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  2587.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  2588.       TSR at a time is brought back into memory at the user's request.
  2589. ----------2FF100-----------------------------
  2590. INT 2F - DOS EXTENDER INSTALLATION CHECK
  2591.     AX = F100h
  2592. Return: AL = FFh if DOS extender present
  2593.         SI = 444Fh ("DO")
  2594.         DI = 5358h ("SX")
  2595. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  2596. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  2597. ----------2FF700-----------------------------
  2598. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  2599.     AX = F700h
  2600. Return: AL = 00h not installed
  2601.          FFh installed
  2602. Note:    AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  2603. ----------2FF701-----------------------------
  2604. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  2605.     AX = F701h
  2606.     BX:CX = 32-bit count of 55ms timer ticks
  2607. ----------2FF800CX4455-----------------------
  2608. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  2609.     AX = F800h
  2610.     CX = 4455h ("DU")
  2611.     DL = 45h ("E")
  2612. Return: AL = FFh if installed
  2613.         ES:BX -> ASCII signature "Universal Data Exchange"
  2614. Program: SuperStor is a disk-compression program by Addstor.
  2615. Note:    returns AX=0001h if AL is not 00h or 01h
  2616. SeeAlso: AX=1001h,AX=F801h
  2617. ----------2FF801CX4455-----------------------
  2618. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  2619.     AX = F801h
  2620.     CX = 4455h ("DU")
  2621.     DL = 45h ("E")
  2622.     ES:BX = return address if successful
  2623. Return: at specified address if successfully removed from memory
  2624.     else
  2625.         AL = error code
  2626.         ???
  2627. Program: SuperStor is a disk-compression program by Addstor.
  2628. Note:    returns AX=0001h if AL is not 00h or 01h
  2629. SeeAlso: AX=1001h,AX=F800h
  2630. ----------2FFB-------------------------------
  2631. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  2632.     AH = FBh
  2633. ----------2FFB00-----------------------------
  2634. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  2635.     AX = FB00h
  2636. Return: AX = 00FFh if installed
  2637. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2638. SeeAlso: INT 10/AH=38h,INT 14/AX=F0F1h
  2639. ----------2FFB00-----------------------------
  2640. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  2641.     AX = FB00h
  2642. Return: AX = FFFFh if installed
  2643.         BX = version (BCD, BH=major, BL=minor)
  2644. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  2645. ----------2FFB01-----------------------------
  2646. INT 2F U - AutoBraille v1.1A - ???
  2647.     AX = FB01h
  2648.     ???
  2649. Return: ???
  2650. ----------2FFB01-----------------------------
  2651. INT 2F U - Jot-It! v1.50 - GET USER NAME
  2652.     AX = FB01h
  2653. Return: DX:BX -> ASCIZ user name
  2654. SeeAlso: AX=FB02h"Jot-It"
  2655. ----------2FFB02-----------------------------
  2656. INT 2F U - AutoBraille v1.1A - ???
  2657.     AX = FB02h
  2658. Return: AH = ???
  2659.     AL = ???
  2660. ----------2FFB02-----------------------------
  2661. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  2662.     AX = FB02h
  2663. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  2664. SeeAlso: AX=FB01h"Jot-It"
  2665. ----------2FFB03-----------------------------
  2666. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  2667.     AX = FB03h
  2668. Return: AX = ???
  2669. ----------2FFB03-----------------------------
  2670. INT 2F U - Jot-It! v1.50 - UNINSTALL
  2671.     AX = FB03h
  2672. Return: resident code removed from memory
  2673. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  2674.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  2675. SeeAlso: AX=FB00h"Jot-It"
  2676. ----------2FFB-------------------------------
  2677. INT 2F U - AutoBraille v1.1A - SET ???
  2678.     AH = FBh
  2679.     AL = 04h-08h
  2680. Return: AX = 0000h
  2681. ----------2FFB-------------------------------
  2682. INT 2F U - AutoBraille v1.1A - SET ???
  2683.     AH = FBh
  2684.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  2685. Return: ???
  2686. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2687. ----------2FFB-------------------------------
  2688. INT 2F U - AutoBraille v1.1A - SET ???
  2689.     AH = FBh
  2690.     AL = 10h-1Fh
  2691.     ???
  2692. Return: ???
  2693. ----------2FFB20-----------------------------
  2694. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  2695.     AX = FB20h
  2696.     BL = flags to set
  2697. SeeAlso: AX=FB21h"AutoBraille"
  2698. ----------2FFB21-----------------------------
  2699. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  2700.     AX = FB21h
  2701.     BL = flags to clear
  2702. SeeAlso: AX=FB20h"AutoBraille"
  2703. ----------2FFB22-----------------------------
  2704. INT 2F U - AutoBraille v1.1A - SET ???
  2705.     AX = FB22h
  2706.     BL = ???
  2707. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2708. ----------2FFB28-----------------------------
  2709. INT 2F U - AutoBraille v1.1A - ???
  2710.     AX = FB28h
  2711.     BX = ???
  2712.     ???
  2713. Return: ???
  2714. SeeAlso: AX=FB29h"AutoBraille"
  2715. ----------2FFB29-----------------------------
  2716. INT 2F U - AutoBraille v1.1A - ???
  2717.     AX = FB29h
  2718.     BX = ???
  2719.     ???
  2720. Return: ???
  2721. SeeAlso: AX=FB28h"AutoBraille"
  2722. ----------2FFB-------------------------------
  2723. INT 2F U - AutoBraille v1.1A - SET ???
  2724.     AH = FBh
  2725.     AL = 2Bh-34h
  2726.     BX = ???
  2727. ----------2FFB35-----------------------------
  2728. INT 2F U - AutoBraille v1.1A - SET ???
  2729.     AX = FB35h
  2730.     BL = ???
  2731. ----------2FFB36-----------------------------
  2732. INT 2F U - AutoBraille v1.1A - SET ???
  2733.     AX = FB36h
  2734.     BL = ???
  2735. ----------2FFB37-----------------------------
  2736. INT 2F U - AutoBraille v1.1A - SET ???
  2737.     AX = FB37h
  2738.     BL = ???
  2739. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  2740. ----------2FFB42BX0001-----------------------
  2741. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  2742.     AX = FB42h
  2743.     BX = 0001h
  2744. Return: AX = version number??? (AL=major, AH=minor)
  2745.     CX = next-selector increment
  2746. ---BC2.0---
  2747.     ES:BX -> 80-byte buffer for ???
  2748.     DX = DPMI version
  2749. ---BC3.0---
  2750.     BX = ??? (0000h)
  2751.     DX = ???
  2752.     ES:SI -> list of valid selectors ???
  2753. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2754.       as version 1.000, while the version distributed with BC++ 3.0
  2755.       identifies itself as version 1.0; the former is 10864 bytes, the
  2756.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  2757.       the BC3.0 version also adds a DPMI host and DOS extender
  2758.     the BC++ 2.0 version displays an error message if called with BX
  2759.       values other than 0001h-0008h
  2760. ----------2FFB42BX0002-----------------------
  2761. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  2762.     AX = FB42h
  2763.     BX = 0002h
  2764.     CX = size in bytes
  2765.     DX = bit flags
  2766.         bit 2: set to allocate DOS memory, clear for DPMI memory
  2767.     SI = selector of descriptor to be modified to access allocated memory
  2768.     DI = selector of a second descriptor to be modified
  2769. Return: AX = ??? or 0000h on error
  2770.     CX:DX = linear base address of DPMI memory block
  2771.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  2772.     ???
  2773. Note:    two segment descriptors may be set if a code and an aliased data
  2774.       segment are required; if only one descriptor is needed, SI should
  2775.       equal DI on entry
  2776. BUG:    when allocating DOS memory, the code computes the linear address by
  2777.       multiplying the segment number by 4 rather than shifting by 4
  2778. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h
  2779. ----------2FFB42BX0002-----------------------
  2780. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  2781.     AX = FB42h
  2782.     BX = 0002h
  2783.     ES:SI -> memory block info (see below)
  2784. Return: ???
  2785. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2786.       as version 1.000, while the version distributed with BC++ 3.0
  2787.       identifies itself as version 1.0; the former is 10864 bytes, the
  2788.       latter 22180 bytes.
  2789. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h
  2790.  
  2791. Format of memory block info:
  2792. Offset    Size    Description
  2793.  00h    WORD    flags
  2794.         bit 0: set if data segment rather than code segment
  2795.         bit 1: information valid
  2796.         bit 2: set if DOS memory block rather than DPMI memory block
  2797.         bit 4: ???
  2798.         bit 15: set if no LDT selectors for memory block???
  2799.  02h    DWORD    block size in bytes
  2800. ---DPMI memory block---
  2801.  06h    DWORD    DPMI memory block handle
  2802. ---DOS memory block---
  2803.  06h    WORD    real-mode segment of memory block
  2804.  08h    WORD    selector of memory block
  2805. ---
  2806.  0Ah    DWORD    linear address of memory
  2807.  0Eh    WORD    memory operation error code
  2808.         0008h no more free LDT descriptors
  2809. ---if flags bit 0 clear---
  2810.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  2811.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  2812. ---if flags bit 0 set---
  2813.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  2814.  12h    WORD    unused???
  2815. ----------2FFB42BX0003-----------------------
  2816. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  2817.     AX = FB42h
  2818.     BX = 0003h
  2819. Return: DX:AX = size of largest free block in paragraphs
  2820.         0000h:0000h on error (BC3.0 version only)
  2821. Note:    AX and DX are destroyed on error, but no other error indicator is
  2822.       returned, under the BC++ 2.0 version of DPMILOAD
  2823. SeeAlso: AX=FB42h/BX=0002h
  2824. ----------2FFB42BX0004-----------------------
  2825. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  2826.     AX = FB42h
  2827.     BX = 0004h
  2828.     DS:DX -> ASCIZ filename of protected-mode executable
  2829. Return: CX = selector of ??? or 0000h
  2830. ---BC3.0---
  2831.     DX = status (0000h,FFF4h,others???) (see below)
  2832. Note:    the filename may also be terminated by a CR rather than a NUL under the
  2833.       BC++ 3.0 version of DPMILOAD
  2834.  
  2835. Values for status:
  2836.  0000h    successful
  2837.  0001h    ??? failure
  2838.  0002h    invalid selector
  2839.  0004h    unknown error
  2840.  0008h    no more LDT descriptors available???
  2841.  FFDEh    unable to set descriptor
  2842.  FFDFh    unable to get segment base address
  2843.  FFE0h    ???
  2844.  FFF2h    invalid parameter value
  2845.  FFF4h    component of filename too long (name not in 8.3 format)
  2846.  FFF5h    pathname too long (>79 chars)
  2847.  FFF6h    ???
  2848.  FFF8h    ???
  2849.  FFF9h    index out of range
  2850.  FFFAh    ???
  2851.  FFFCh    invalid access to code segment???
  2852.  FFFEh    ???
  2853.  FFFFh    general error
  2854. ----------2FFB42BX0005-----------------------
  2855. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  2856.     AX = FB42h
  2857.     BX = 0005h
  2858.     CX = selector of DPMILOAD data (see below)
  2859.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  2860. Return: DX = status (see AX=FB42h/BX=0004h)
  2861.         0000h successful
  2862.         AX:BX -> ??? FAR function (called with two words on top of stk)
  2863.         else
  2864.         BX destroyed
  2865. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  2866.  
  2867. Format of DPMILOAD data:
  2868. Offset    Size    Description
  2869.  00h 12 BYTEs    ???
  2870.  0Ch    WORD    ??? bit flags
  2871.  0Eh 14 BYTEs    ???
  2872.  1Ch    WORD    number of memory control records
  2873.  1Eh 25 BYTEs    ???
  2874.  37h    BYTE    ??? bit flags
  2875.         bit 4: data valid???
  2876.  38h  4 BYTEs    ???
  2877.  3Ch    WORD    ???
  2878.  3Eh 12 BYTEs    ???
  2879.  46h    BYTE    ??? counter
  2880.  47h    BYTE    ???
  2881.  48h    BYTE    ???
  2882.  49h    BYTE    ???
  2883.  4Ah    WORD    ???
  2884.  4Ch  2 BYTEs    ???
  2885.  4Eh    WORD    offset of array of 64-byte memory control records
  2886.  52h    WORD    offset of name list (see below)
  2887.  54h  4 BYTEs    ???
  2888.  58h    WORD    offset of array of 6-byte objects
  2889.  5Ah  8 BYTEs    ???
  2890.  62h  9 BYTEs    ASCIZ name for ???
  2891.  6Bh  9 BYTEs    ASCIZ name for ???
  2892.     ???
  2893.  
  2894. Format of name list entry [array]:
  2895. Offset    Size    Description
  2896.  00h    BYTE    length of name (00h if end of array)
  2897.  01h  N BYTEs    name
  2898.  N+1    WORD    1-based index into array of unknown 6-byte objects
  2899.  
  2900. Format of 6-byte objects:
  2901. Offset    Size    Description
  2902.  00h    BYTE    ???
  2903.  01h    BYTE    ???
  2904.  02h    BYTE    ???
  2905.  03h    BYTE    1-based index of memory control record
  2906.  04h    WORD    ???
  2907.  
  2908. Format of memory control record:
  2909. Offset    Size    Description
  2910.  00h 20 BYTEs    memory block info (see AX=FB42h/BX=0002h)
  2911.  14h  6 BYTEs    ???
  2912.  1Ah    BYTE    ???
  2913.  1Bh  2 BYTEs    ???
  2914.  1Dh    BYTE    ??? bit flags
  2915.  1Eh 14 BYTEs    ???
  2916.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  2917.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  2918.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  2919.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  2920.  3Ch  4 BYTEs    ???
  2921. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  2922.       the pointers at offsets 34h and 38h
  2923. ----------2FFB42BX0006-----------------------
  2924. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  2925.     AX = FB42h
  2926.     BX = 0006h
  2927.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  2928.     DX = 1-based index into array of ??? 6-byte objects
  2929. Return: DX = status (see AX=FB42h/BX=0004h)
  2930.         0000h successful
  2931.         AX:BX -> ??? FAR function (called with two words on top of stk)
  2932.         else
  2933.         BX destroyed
  2934. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  2935. ----------2FFB42BX0007-----------------------
  2936. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  2937.     AX = FB42h
  2938.     BX = 0007h
  2939.     CX = selector of ???
  2940. Return: ???
  2941. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2942.       as version 1.000, while the version distributed with BC++ 3.0
  2943.       identifies itself as version 1.0; the former is 10864 bytes, the
  2944.       latter 22180 bytes.
  2945. ----------2FFB42BX0007-----------------------
  2946. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  2947.     AX = FB42h
  2948.     BX = 0007h
  2949.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  2950.     ???
  2951. Return: DX = status (see AX=FB42h/BX=0004h)
  2952.         0000h successful    
  2953.         AX = ???
  2954. ----------2FFB42BX0008-----------------------
  2955. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  2956.     AX = FB42h
  2957.     BX = 0008h
  2958.     CX = bit flags
  2959.         bit 2: set if DPMI memory, clear if DOS memory
  2960.     DX = selector of DOS memory block
  2961.     SI:DI = handle of DPMI memory block
  2962. Return: DX = 0000h on error, unchanged if succcessful
  2963. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  2964.       as version 1.000, while the version distributed with BC++ 3.0
  2965.       identifies itself as version 1.0; the former is 10864 bytes, the
  2966.       latter 22180 bytes.
  2967. SeeAlso: AX=FB42h/BX=0002h
  2968. ----------2FFB42BX0008-----------------------
  2969. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  2970.     AX = FB42h
  2971.     BX = 0008h
  2972.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  2973. Return: ???
  2974. SeeAlso: AX=FB42h/BX=0009h
  2975. ----------2FFB42BX0009-----------------------
  2976. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  2977.     AX = FB42h
  2978.     BX = 0009h
  2979.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  2980.     ???
  2981. Return: ???
  2982. SeeAlso: AX=FB42h/BX=0008h"3.0"
  2983. ----------2FFB42BX000A-----------------------
  2984. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  2985.     AX = FB42h
  2986.     BX = 000Ah
  2987.     CX = 0001h
  2988.     DX = ???
  2989.     SI = ???
  2990. Return: after user exits subshell
  2991. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  2992.       function is not available in protected mode.
  2993.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  2994.       version also adds a DPMI host and DOS extender.
  2995. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  2996. ----------2FFB42BX000B-----------------------
  2997. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  2998.     AX = FB42h
  2999.     BX = 000Bh
  3000. ----------2FFB42BX000C-----------------------
  3001. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  3002.     AX = FB42h
  3003.     BX = 000Ch ???
  3004.     ES:SI -> memory block info ??? (see AX=FB42h/BX=0002h"3.0")
  3005. Return: DX = status???
  3006. SeeAlso: AX=FB42h/BX=000Fh
  3007. ----------2FFB42BX000D-----------------------
  3008. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  3009.     AX = FB42h
  3010.     BX = 000Dh
  3011.     CX = number of words to copy from protected-mode to real mode stack
  3012.     DL = interrupt number
  3013.     DH = flags
  3014.         bit 0: reset the interrupt controller and A20 line
  3015.     ES:DI -> real-mode call structure (see INT 31/AX=0300h)
  3016. Return: CX = status
  3017.         0000h successful
  3018.         0001h failed
  3019. SeeAlso: INT 31/AX=0300h
  3020. ----------2FFB42BX000E-----------------------
  3021. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  3022.     AX = FB42h
  3023.     BX = 000Eh
  3024.     DS:DX -> ASCIZ or CR-terminated name of ???
  3025. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) corresponding to
  3026.         name, 0000h on error
  3027. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  3028. ----------2FFB42BX000F-----------------------
  3029. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  3030.     AX = FB42h
  3031.     BX = 000Fh
  3032.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  3033. Return: ???
  3034. SeeAlso: AX=FB42h/BX=000Ch
  3035. ----------2FFB42BX0010-----------------------
  3036. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  3037.     AX = FB42h
  3038.     BX = 0010h
  3039.     DX = segment number
  3040. Return: CX = status (see also AX=FB42h/BX=0004h)
  3041.         0000h successful
  3042.         DX = selector number for descriptor
  3043.         0008h failed
  3044. SeeAlso: AX=FB42h/BX=0023h
  3045. ----------2FFB42BX0011-----------------------
  3046. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3047.     AX = FB42h
  3048.     BX = 0011h
  3049.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3050.     ???
  3051. Return: DX = status (see also AX=FB42h/BX=0004h)
  3052.         0000h successful
  3053.         AX:BX -> ??? name
  3054.         0002h invalid selector
  3055.         FFFEh ??? error
  3056. ----------2FFB42BX0012-----------------------
  3057. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3058.     AX = FB42h
  3059.     BX = 0012h
  3060.     CX = selector for ???
  3061. Return: CX = selector for ???
  3062. ----------2FFB42BX0013-----------------------
  3063. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3064.     AX = FB42h
  3065.     BX = 0013h
  3066.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3067.     DX = 1-based index of ???
  3068. Return: CX = status (see also AX=FB42h/BX=0004h)
  3069.         0000h successful
  3070.         BX = ??? or 0000h
  3071.         0002h invalid selector
  3072.         FFF9h ??? error
  3073. ----------2FFB42BX0014-----------------------
  3074. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3075.     AX = FB42h
  3076.     BX = 0014h ???
  3077.         CX = 0001h
  3078.         Return: BX = 0000h
  3079. Note:    unlike most of the DPMILOAD functions, this call is available only in
  3080.       real or V86 mode
  3081. SeeAlso: AX=FB42h/BX=000Ah
  3082. ----------2FFB42BX0015-----------------------
  3083. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3084.     AX = FB42h
  3085.     BX = 0015h uninstall
  3086.     CX = 0001h
  3087. Return: ???
  3088. Note:    unlike most of the DPMILOAD functions, this call is available only in
  3089.       real or V86 mode
  3090. SeeAlso: AX=FB42h/BX=000Ah
  3091. ----------2FFB42BX0016-----------------------
  3092. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3093.     AX = FB42h
  3094.     BX = 0016h
  3095.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3096. Return: DX = status (see also AX=FB42h/BX=0004h)
  3097.         0000h successful
  3098.         CX = ???
  3099. ----------2FFB42BX0017-----------------------
  3100. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3101.     AX = FB42h
  3102.     BX = 0017h
  3103.     CX = ???
  3104.     DX = ???
  3105.     ???
  3106. Return: DX = status (0000h,0001h) (see below)
  3107. ----------2FFB42BX0018-----------------------
  3108. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  3109.     AX = FB42h
  3110.     BX = 0018h
  3111.     CX = ???
  3112. ----------2FFB42BX0019-----------------------
  3113. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3114.     AX = FB42h
  3115.     BX = 0019h
  3116.     CX = selector for ???
  3117.     ???
  3118. Return: DX = status (see also AX=FB42h/BX=0004h)
  3119.         0000h successful
  3120.         CX = selector for ???
  3121. ----------2FFB42BX001A-----------------------
  3122. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3123.     AX = FB42h
  3124.     BX = 001Ah
  3125.     CX = selector for ???
  3126.     ???
  3127. Return: DX = status (see also AX=FB42h/BX=0004h)
  3128.         0000h successful
  3129.         0004h failed
  3130.     CX:BX -> ???
  3131. ----------2FFB42BX001B-----------------------
  3132. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3133.     AX = FB42h
  3134.     BX = 001Bh
  3135.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3136.     DX = offset of ???
  3137. Return: DX = status (see also AX=FB42h/BX=0004h)
  3138.         0000h successful
  3139.         BX = selector for ???
  3140.         CX = selector for ???
  3141.         0002h invalid selector
  3142. ----------2FFB42BX001C-----------------------
  3143. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3144.     AX = FB42h
  3145.     BX = 001Ch
  3146.     ES = selector for DPMILOAD data (see AX=FB42h/BX=0005h)
  3147.     CX = 1-based index of ???
  3148.     DX = 1-based index of ???
  3149. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  3150. ----------2FFB42BX001D-----------------------
  3151. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3152.     AX = FB42h
  3153.     BX = 001Dh
  3154. Return: CX:DX = ???
  3155. ----------2FFB42BX001E-----------------------
  3156. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3157.     AX = FB42h
  3158.     BX = 001Eh
  3159.     CX = ???
  3160.     ???
  3161. Return: DX = status (see also AX=FB42h/BX=0004h)
  3162.         0000h successful
  3163.         FFF7h ??? error
  3164.     CX:BX -> ???
  3165. ----------2FFB42BX001F-----------------------
  3166. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  3167.     AX = FB42h
  3168.     BX = 001Fh
  3169.     DS:DX -> 8-character name of ???
  3170.     ???
  3171. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) for ???
  3172.         0000h on error
  3173. SeeAlso: AX=FB42h/BX=000Eh
  3174. ----------2FFB42BX0020-----------------------
  3175. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  3176.     AX = FB42h
  3177.     BX = 0020h
  3178. Return: DX = ??? (always 0000h)
  3179. ----------2FFB42BX0021-----------------------
  3180. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  3181.     AX = FB42h
  3182.     BX = 0021h
  3183.     CL = exception number (00h-1Fh)
  3184. Return: DX = status (see also AX=FB42h/BX=0004h)
  3185.         0000h successful
  3186.         AX:BX = selector:offset of handler
  3187.         FFF2h unable to get exception handler vector
  3188. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  3189. ----------2FFB42BX0022-----------------------
  3190. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  3191.     AX = FB42h
  3192.     BX = 0022h
  3193.     CL = exception number (00h-1Fh)
  3194.     SI:DX = selector:offset of new handler
  3195. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  3196. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  3197. ----------2FFB42BX0023-----------------------
  3198. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  3199.     AX = FB42h
  3200.     BX = 0023h
  3201.     CX = selector
  3202. Return: DX = status (see also AX=FB42h/BX=0004h)
  3203.         0000h successful
  3204.         CX = real-mode segment number
  3205.         FFF2h descriptor has invalid base address for real-mode segment
  3206. SeeAlso: AX=FB42h/BX=0010h
  3207. ----------2FFB42BX0024-----------------------
  3208. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  3209.     AX = FB42h
  3210.     BX = 0024h
  3211.     CL = interrupt number
  3212. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  3213.     AX:BX = selector:offset of handler
  3214. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  3215. ----------2FFB42BX0025-----------------------
  3216. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  3217.     AX = FB42h
  3218.     BX = 0025h
  3219.     CL = interrupt number
  3220.     SI:DX = selector:offset of new handler
  3221. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  3222. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  3223. ----------2FFB42BX0026-----------------------
  3224. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3225.     AX = FB42h
  3226.     BX = 0026h
  3227.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3228.     DX = 1-based index of ???
  3229.     ???
  3230. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  3231.         0000h successful
  3232.         BX = offset of ??? within data structure
  3233. ----------2FFB42BX0027-----------------------
  3234. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3235.     AX = FB42h
  3236.     BX = 0027h
  3237.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3238.     DX = offset of ???
  3239. Return: DX = status (see also AX=FB42h/BX=0004h)
  3240.         0000h successful
  3241.         BX = ???
  3242. ----------2FFB42BX0080-----------------------
  3243. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3244.     AX = FB42h
  3245.     BX = 0080h
  3246.     ???
  3247. Return: AX = ???
  3248.     ???
  3249. ----------2FFB42BX0081-----------------------
  3250. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3251.     AX = FB42h
  3252.     BX = 0081h
  3253.     ???
  3254. Return: AX = ???
  3255.     ???
  3256. ----------2FFB43-----------------------------
  3257. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  3258.     AX = FB43h
  3259.     BX = subfunction (at least 0000h-000Eh)
  3260. Notes:    this function is only present in protected mode; it does nothing but
  3261.       an immediate IRET
  3262.     DPMILOAD.EXE itself calls various subfunctions:
  3263.         subfunction 0004h is called with CX=selector of ???, DI=selector
  3264.         of DPMILOAD data
  3265.         subfunction 0008h is called with CX=selector of DPMILOAD data
  3266. ----------2FFB64-----------------------------
  3267. INT 2F U - AutoBraille v1.1A - GET ???
  3268.     AX = FB64h
  3269. Return: AX = ??? (0006h seen)
  3270. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3271. ----------2FFBA1BX0081-----------------------
  3272. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  3273.     AX = FBA1h
  3274.     BX = 0081h
  3275.     ES:DI -> 16-byte buffer
  3276. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  3277. Note:    TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.  It was
  3278.       present only in Borland C++ 2.0; with version 3.0, the DOS extender
  3279.       was moved into DPMILOAD.
  3280. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h 
  3281. SeeAlso: INT 21/AX=4403h"TKERNEL"
  3282. ----------2FFBA1BX0082-----------------------
  3283. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  3284.     AX = FBA1h
  3285.     BX = 0082h
  3286.     ES:DI -> response buffer (see below)
  3287. Return: ES:DI buffer filled
  3288. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  3289.  
  3290. Format of response buffer:
  3291. Offset    Size    Description
  3292.  00h  4 BYTEs    signature "IABH"
  3293.  04h    DWORD    pointer to FAR extender entry point
  3294.  
  3295. Call entry point with:
  3296.     AX = function number
  3297.         0000h initialize???
  3298.         STACK:    WORD  ???
  3299.         Return: AX = status???
  3300.             STACK unchanged
  3301.         0001h get version???
  3302.         Return: AX = 0200h for v2.0.34
  3303.         0002h get ???
  3304.         Return: AX = ??? (011Eh or 0182h seen)
  3305.         0003h load protected-mode executable
  3306.         STACK:    DWORD -> ASCIZ filename of executable
  3307.             DWORD    ???
  3308.             DWORD -> program arguments (counted string plus CR)
  3309.             DWORD -> environment for protected-mode executable
  3310.                 (terminated with two consecutive NULs)
  3311.             DWORD -> WORD buffer for ???
  3312.         Return:    AX = status???
  3313.             STACK unchanged
  3314.         0004h get descriptor
  3315.         STACK:    WORD    selector for which to get descriptor
  3316.             WORD    segment number (when running in real mode)
  3317.             DWORD -> buffer for descriptor
  3318.         Return: CF clear if successful
  3319.                 buffer filled
  3320.             CF set on error
  3321.                 AX destroyed???
  3322.             STACK unchanged
  3323.         0005h ???
  3324.         STACK:    WORD    selector for ???
  3325.             WORD    subfunction number???
  3326.                 0000h run previously-loaded program???
  3327.                 0001h ??? (similar to 0000h)
  3328.                 0002h
  3329.                 0003h
  3330.                 0005h ??? (similar to 0000h and 0001h)
  3331.         Return: AX = status???
  3332.             STACK unchanged
  3333.         0006h ???
  3334.         STACK:    WORD ???
  3335.             DWORD -> WORD (call) max iterations of ???
  3336.                       (return) remaining iterations
  3337.         Return: AX = ???
  3338.             STACK unchanged
  3339.         0007h unused
  3340.         Return: AX = 0001h
  3341.         0008h unused
  3342.         Return: AX = 0001h
  3343.         0009h copy protected-mode memory into conventional memory
  3344.         STACK:    WORD    selector for source segment
  3345.             WORD    segment of source if in real mode???
  3346.             DWORD    offset of source
  3347.             WORD    number of bytes to copy
  3348.             DWORD -> low-memory destination
  3349.         Return: AX = status
  3350.             STACK unchanged
  3351.         000Ah copy conventional memory into protected-mode memory
  3352.         STACK:    WORD    selector for destination segment
  3353.             WORD    segment of destination if in real mode???
  3354.             DWORD    offset of destination
  3355.             WORD    number of bytes to copy
  3356.             DWORD -> low-memory source
  3357.         Return: AX = status
  3358.             STACK unchanged
  3359.         000Bh get ??? pointers
  3360.         STACK:    WORD desired pointer
  3361.                 0000h get ???
  3362.                 0002h get protected-mode CR3
  3363.                 0003h get 4K page table buffer pointer
  3364.                 else Return: DX:AX = FFFFh:FFFFh
  3365.         Return: DX:AX = requested pointer
  3366.             STACK unchanged
  3367.         000Ch set ??? pointers
  3368.         STACK:    WORD desired pointer
  3369.                 0000h set ???
  3370.                 0002h set protected-mode CR3
  3371.                 0003h set 4K page table buffer pointer
  3372.                 else ignore
  3373.             DWORD new value for pointer
  3374.         Return: STACK unchanged
  3375.         000Dh get ??? pointers
  3376.         STACK:    WORD desired pointer
  3377.                 0000h get ???
  3378.                 0001h get ???
  3379.                 0002h get ???
  3380.                 0003h get ???
  3381.                 0004h get ???
  3382.                 0005h get ???
  3383.                 0006h get ???
  3384.                 0007h get ???
  3385.                 else Return: DX:AX = FFFFh:FFFFh
  3386.         Return: DX:AX = desired pointer
  3387.             STACK unchanged
  3388.         000Eh set ??? pointer
  3389.         STACK:    WORD desired pointer
  3390.                 0000h set ???
  3391.                 0001h set ???
  3392.                 0002h set ???
  3393.                 0003h set ???
  3394.                 0004h set ???
  3395.                 0005h set ???
  3396.                 0006h set ???
  3397.                 0007h set ???
  3398.                 else Return: DX:AX = FFFFh:FFFFh
  3399.         Return: STACK unchanged
  3400.         000Fh get ???
  3401.         Return: AX = ??? (seen 0008h)
  3402.         0010h get ???
  3403.         Return: AX = ???
  3404.         0011h determine whether selector is valid
  3405.         STACK:    WORD    possible selector
  3406.         Return: AX = selector or 0000h if invalid
  3407.             STACK unchanged
  3408.         0012h get physical address
  3409.         STACK:    WORD    selector for desired segment
  3410.             WORD    segment number if in real mode
  3411.             DWORD    offset within segment
  3412.         Return: DX:AX = 32-bit physical address or 00000000h on error
  3413.             BX destroyed
  3414.             STACK unchanged
  3415.         0013h ???
  3416.         Note:    normally jumps to code for function 0012h
  3417.         0014h copy protected-mode memory to conventional memory, with ???
  3418.         STACK:    WORD    selector for source segment
  3419.             WORD    segment of source if in real mode???
  3420.             DWORD    offset of source
  3421.             WORD    number of bytes to copy
  3422.             DWORD -> low-memory destination
  3423.         Return: AX = status???
  3424.             STACK unchanged
  3425.         0015h copy conventional memory to protected-mode memory, with ???
  3426.         STACK:    WORD    selector for destination segment
  3427.             WORD    segment of destination if in real mode???
  3428.             DWORD    offset of destination
  3429.             WORD    number of bytes to copy
  3430.             DWORD -> low-memory source
  3431.         Return: AX = status???
  3432.             STACK unchanged
  3433.         0016h set ??? pointer
  3434.         STACK:    WORD    unused
  3435.             DWORD -> ??? or 0000h:0000h
  3436.         Return: AX = 0000h
  3437.             STACK unchanged
  3438.         0017h allocate real-mode procedure???
  3439.         STACK:    DWORD    ASCIZ name of procedure
  3440.             DWORD ???
  3441.             DWORD    address of subroutine to invoke
  3442.         Return: AX = status
  3443.                 0032h procedure by that name exists
  3444.                 0033h no more real-mode procedures available
  3445.             DX destroyed
  3446.             STACK unchanged
  3447.         0018h unused
  3448.         Return: AX = 0001h
  3449.         0019h get parameter block
  3450.         Return: DX:AX -> parameter block (format unknown at this time,
  3451.                 but 92h bytes)
  3452.                 (preceded by signature "!!PARAM-BLOCK!!")
  3453.         001Ah get ???
  3454.         Return: AX = ??? (0148h seen)
  3455.         001Bh free real-mode procedure???
  3456.         STACK:    DWORD -> ASCIZ name of procedure
  3457.         Return: ???
  3458.             STACK unchanged
  3459.         001Ch check whether packets from protected mode task pending
  3460.         Return: AX = 0001h if packets pending, 0000h if not
  3461.         001Dh set ???
  3462.         STACK:    DWORD ??? or 0000h:0000h
  3463.         Return: AX,BX destroyed
  3464.             STACK unchanged
  3465.         001Eh ???
  3466.         STACK:    WORD ??? (high byte ignored)
  3467.             DWORD -> data structure (see below)
  3468.         Return: AX,BX,CX,DX destroyed
  3469.             data structure updated
  3470.             STACK unchanged
  3471.         Format of data structure
  3472.         Offset    Size    Description
  3473.          00h  2 BYTEs    unused
  3474.          02h    WORD    ???
  3475.          04h    WORD    ???
  3476.          06h    WORD    ???
  3477.          08h  2 BYTEs    unused
  3478.          0Ah    WORD    ???
  3479.          0Ch    WORD    (call) ???
  3480.                 (return) offset of this data structure (BUG?)
  3481.         001Fh set ???
  3482.         STACK:    WORD ??? (set to 0001h if zero)
  3483.         Return: AX destroyed
  3484.             STACK unchanged
  3485.         0020h ???
  3486.         STACK:    DWORD -> ??? (8 bytes of data)
  3487.         Return: AX = ???
  3488.             STACK unchanged
  3489.         0021h ???
  3490.         STACK:    DWORD -> ??? (8 bytes of data)
  3491.             WORD    ???
  3492.             WORD    ???
  3493.         Return: AX = ???
  3494.             STACK unchanged
  3495.         0022h ???
  3496.         STACK:    DWORD -> ??? (8 bytes of data)
  3497.             DWORD -> 4-byte buffer for results
  3498.         Return: AX = ???
  3499.             STACK unchanged
  3500.         0023h ???
  3501.         STACK:    DWORD -> ??? (8 bytes of data)
  3502.         Return: AX = ???
  3503.             STACK unchanged
  3504.         0024h set ???
  3505.         STACK:    WORD ???
  3506.         Return: AX destroyed
  3507.             STACK unchanged
  3508.         0025h get ???
  3509.         Return: AX = ??? (value set with func 0024h)
  3510.         0026h BUG: jumps to hyperspace due to fencepost error
  3511.         FFFFh set DOS memory management functions
  3512.         BX:SI -> FAR routine for allocating DOS memory
  3513.             (called with AH=48h,BX=number of paragraphs to alloc;
  3514.              returns CF clear, AX=segment of allocated memory, or
  3515.                  CF set on error)
  3516.         CX:DI -> FAR routine for freeing DOS memory
  3517.             (called with AH=49h,ES=segment of block to free;
  3518.              returns CF set on error,AX=error code)
  3519.         Note: each of these pointers normally points at INT 21/RETF
  3520.         other Return: AX = 0001h
  3521. Note:    BX may be destroyed by any of the API calls
  3522. ----------2FFBA1BX0084-----------------------
  3523. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  3524.     AX = FBA1h
  3525.     BX = 0084h
  3526.     ES:DI -> response buffer (see below)
  3527. Return: ES:DI buffer filled
  3528. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  3529.  
  3530. Format of response buffer:
  3531. Offset    Size    Description
  3532.  00h  4 BYTEs    signature "IABH"
  3533.  04h    WORD    success indicator
  3534.         0001h failed (INT 2F hooked by another program)
  3535.         unchanged if successful
  3536.  06h    WORD    segment of ???
  3537.  08h    WORD    segment of ??? memory block to free if nonzero
  3538.  0Ah    WORD    segment of ??? memory block to free if nonzero
  3539. ----------2FFBFBES0000-----------------------
  3540. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  3541.     AX = FBFBh
  3542.     ES = 0000h
  3543. Return: ES nonzero if installed
  3544.         ES:BX -> entry point data structure (see below)
  3545. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  3546.  
  3547. Format of entry point data structure:
  3548. Offset    Size    Description
  3549.  00h  3 BYTEs    signature "FB "
  3550.  03h    BYTE    driver major version number???
  3551.  04h    DWORD    speech driver entry point
  3552.  08h 24 BYTEs    ???
  3553.  20h  ? BYTEs    data buffer for calling speech driver
  3554.  
  3555. Call driver entry point with:
  3556.     AL = function
  3557.         07h speak a string
  3558.         data buffer (see above) contains:
  3559.             BYTE  length of string
  3560.               N BYTEs string to speak
  3561. ----------2FFE00DI4E55-----------------------
  3562. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  3563.     AX = FE00h
  3564.     DI = 4E55h ("NU")
  3565.     SI = TSR identifier
  3566.         4346h ("CF") NCACHE-F (v5) / NCACHE (v6.0+)
  3567.         4353h ("CS") NCACHE-S (v5 only)
  3568.         4443h ("DC") DISKREET
  3569.         444Dh ("DM") DISKMON
  3570.         4653h ("FS") FILESAVE (v5) / EP (v6.0+)
  3571. Return: SI = TSR reply
  3572.         lowercase version of SI on entry (i.e. SI OR 2020h)
  3573.     AH = status
  3574.         00h installed but disabled internally
  3575.         01h installed and enabled
  3576.     AL = status
  3577.         00h    NCACHE-x or DISKREET installed
  3578.         01h FILESAVE / EP / DISKMON v6 installed
  3579.         45h    DISKMON v5 installed
  3580.     BX = length of *.INI file (DISKMON and FILESAVE/EP only) (see below)
  3581.     CX = segment of resident portion
  3582.         FFFFh if completely loaded high (NCACHE)
  3583. ---FILESAVE/EP---
  3584.     DL = ??? (apparently always 00h)
  3585. ---DISKMON---
  3586.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6])
  3587. Note:    the value returned in CX is incorrect for NCACHE 6.00
  3588. SeeAlso: AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  3589.  
  3590. Format of DISKMON.INI file:
  3591. Offset    Size    Description
  3592. -6Ch 108 BYTEs    (in memory copy only)
  3593.         list of filenames which are always protected:
  3594.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  3595.           MIO.SYS/IO.BIN, COMMAND.COM
  3596.  00h    BYTE    ??? always 01h
  3597.  01h    BYTE    disk light (00h off, 01h on)
  3598.  02h    BYTE    disk protection (00h off, 01h on)
  3599.  03h    BYTE    protected areas
  3600.         01h system area
  3601.         02h files
  3602.         03h system area and files
  3603.         04h entire disk
  3604.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  3605.  05h 27 BYTEs    filename extension list (9 entries)
  3606.         (lowercase, blank padded or = 000000h)
  3607.  20h 240 BYTEs    filename list (20 entries)
  3608.         (lowercase, name and extension blank padded, with '.')
  3609. Note:    CX:0508h -> copy in installed TSR (v5)
  3610.     CX:052Fh -> copy in installed TSR (v6)
  3611.  
  3612. Format of FILESAVE.INI / EP.INI file:
  3613. Offset    Size    Description
  3614.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  3615.  00h    BYTE    drives    A: - H:
  3616.  01h    BYTE    drives    I: - P:
  3617.  02h    BYTE    drives    Q: - X:
  3618.  03h    BYTE    drives    Y: - Z:
  3619.  04h    BYTE    which files to protect
  3620.         00h all files
  3621.         01h all files with extension in list
  3622.         02h all files except those with extension in list
  3623.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  3624.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  3625.  21h    WORD    number of days after which files are purged (0 = never)
  3626.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  3627. Note:    CX:03D2h -> copy in installed TSR (v5.0)
  3628.     CX:03F5h -> copy in installed TSR (v6.0)
  3629. ----------2FFE01DI4E55-----------------------
  3630. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  3631.     AX = FE01h
  3632.     DI = 4E55h ("NU")
  3633.     SI = TSR identifier (see AX=FE00h)
  3634. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3635.     AX = status
  3636.         0002h successful (DISKMON, FILESAVE, EP)
  3637.         FE00h successful (NCACHE-x, DISKREET)
  3638. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  3639.       report generated by the programs still indicates the previous state,
  3640.       and DISKMON.INI is not updated
  3641.     apparently has no effect on DISKREET
  3642. SeeAlso: AX=FE00h,AX=FE02h
  3643. ----------2FFE02DI4E55-----------------------
  3644. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  3645.     AX = FE02h
  3646.     DI = 4E55h ("NU")
  3647.     SI = TSR identifier (see AX=FE00h)
  3648. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3649.     AX = status
  3650.         0004h successful (DISKMON, FILESAVE)
  3651.         FE00h successful (NCACHE-x, DISKREET)
  3652. Note:    (see AX=FE01h)
  3653. SeeAlso: AX=FE00h,AX=FE01h
  3654. ----------2FFE03DI4E55-----------------------
  3655. INT 2F U - NORTON UTILITIES 5.0+ TSRs - internal - ???
  3656.     AX = FE03h
  3657.     DI = 4E55h ("NU")
  3658.     SI = TSR identifier (see AX=FE00h)
  3659. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  3660.     AX = status
  3661.         0006h successful???
  3662. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  3663.     reportedly dangerous
  3664. SeeAlso: AX=FE00h
  3665. ----------2FFE04DI4E55-----------------------
  3666. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  3667.     AX = FE04h
  3668.     DI = 4E55h ("NU")
  3669.     SI = TSR identifier (see AX=FE00h)
  3670. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  3671.     AX = status
  3672.         0008h successful???
  3673. SeeAlso: AX=FE00h
  3674. ----------2FFE05DI4E55-----------------------
  3675. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  3676.     AX = FE05h
  3677.     DI = 4E55h ("NU")
  3678.     SI = TSR identifier (see AX=FE00h)
  3679. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  3680.     AX = status
  3681.         000Ah successful???
  3682. Note:    reportedly dangerous
  3683. SeeAlso: AX=FE00h
  3684. ----------2FFF00-----------------------------
  3685. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  3686.     AX = FF00h
  3687. Return: AL = 00h not installed, OK to install
  3688.        = 01h not installed, not OK to install
  3689.        = FFh installed
  3690. SeeAlso: AX=FF01h,INT 21/AH=FFh"Topware",INT 7A"Topware"
  3691. ----------2FFF01-----------------------------
  3692. INT 2F - Topware Network Operating System - GET VERSION
  3693.     AX = FF01h
  3694. Return: AX = version
  3695. SeeAlso: AX=FF00h
  3696. ----------30---------------------------------
  3697. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  3698.    the CALL 5 entry point does a FAR jump to here
  3699. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  3700.       memory
  3701. SeeAlso: INT 21/AH=26h
  3702. ----------31---------------------------------
  3703. INT 31 - overwritten by CP/M jump instruction in INT 30
  3704. ----------310000-----------------------------
  3705. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  3706.     AX = 0000h
  3707.     CX = number of descriptors to allocate
  3708. Return: CF clear if successful
  3709.         AX = base selector
  3710.     CF set on error
  3711.         AX = error code (DPMI 1.0+)
  3712.         0000h-7FFFh DOS error passed through by DPMI
  3713.         8001h unsupported function
  3714.         8002h object in wrong state for function
  3715.         8003h system integrity would be endangered
  3716.         8004h deadlock detected
  3717.         8005h pending serialization request cancelled
  3718.         8010h out of DPMI internal resources
  3719.         8011h descriptor unavailable
  3720.         8012h linear memory unavailable
  3721.         8013h physical memory unavailable
  3722.         8014h backing store unavailable
  3723.         8015h callback unavailable
  3724.         8016h handle unavailable
  3725.         8017h maximum lock count exceeded
  3726.         8018h shared memory already serialized exclusively by another
  3727.         8019h shared memory already serialized shared by another client
  3728.         8021h invalid value for numeric or flag parameter
  3729.         8022h invalid segment selector
  3730.         8023h invalid handle
  3731.         8024h invalid callback
  3732.         8025h invalid linear address
  3733.         8026h request not supported by hardware
  3734. Notes:    DPMI is the DOS Protected-Mode Interface
  3735.     the base and limit of the returned descriptors will be 0, and the type
  3736.       will be "data"
  3737.     add the value returned by INT 31/AX=0003h to move to subsequent
  3738.       descriptors if multiple descriptors were allocated
  3739.     not supported by MS Windows 3.0 in Standard mode
  3740. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  3741. ----------310001-----------------------------
  3742. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  3743.     AX = 0001h
  3744.     BX = selector to free
  3745. Return: CF clear if successful
  3746.     CF set on error
  3747.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  3748. Notes:    only one descriptor is freed per call
  3749.     the program's initial CS, DS, and SS descriptors may be freed
  3750.     (DPMI 1.0+) any segment registers containing the freed selector are
  3751.       set to 0000h
  3752.     not supported by MS Windows 3.0 in Standard mode
  3753. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  3754. ----------310002-----------------------------
  3755. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  3756.     AX = 0002h
  3757.     BX = real mode segment
  3758. Return: CF clear if successful
  3759.         AX = selector corresponding to real mode segment (64K limit)
  3760.     CF set on error
  3761.         AX = error code (DPMI 1.0+) (8011h) (see AX=0000h)
  3762. Notes:    multiple calls for the same real mode segment return the same selector
  3763.     the returned descriptor can never be modified or freed
  3764.     not supported by MS Windows 3.0 in Standard mode
  3765. ----------310003-----------------------------
  3766. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  3767.     AX = 0003h
  3768. Return: CF clear
  3769.         AX = value to add to get next sequential selector
  3770. Notes:    the increment will be a power of two
  3771.     not supported by MS Windows 3.0 in Standard mode
  3772. SeeAlso: AX=0000h
  3773. ----------310004-----------------------------
  3774. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  3775.     AX = 0004h
  3776.     BX = selector to lock (prevent paging)
  3777. Return: ???
  3778. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  3779.       specification, this function is called by MS Windows TASKMAN,
  3780.       PROGMAN, and KERNEL
  3781. SeeAlso: AX=0005h,AX=0600h
  3782. ----------310005-----------------------------
  3783. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  3784.     AX = 0005h
  3785.     BX = selector to unlock (permit paging)
  3786. Return: ???
  3787. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  3788.       specification, this function is called by MS Windows TASKMAN,
  3789.       PROGMAN, and KERNEL
  3790. SeeAlso: AX=0004h,AX=0601h
  3791. ----------310006-----------------------------
  3792. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  3793.     AX = 0006h
  3794.     BX = selector
  3795. Return: CF clear if successful
  3796.         CX:DX = linear base address of segment
  3797.     CF set on error
  3798.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  3799. Note:    not supported by MS Windows 3.0 in Standard mode
  3800. SeeAlso: AX=0007h,INT 21/AX=3504h
  3801. ----------310007-----------------------------
  3802. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  3803.     AX = 0007h
  3804.     BX = selector
  3805.     CX:DX = linear base address
  3806. Return: CF clear if successful
  3807.     CF set on error
  3808.         AX = error code (DPMI 1.0+) (8022h,8025h) (see AX=0000h)
  3809. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  3810.     only the low 24 bits of the address will be used by 16-bit DPMI
  3811.       implementations even on a 386 or higher
  3812.     DPMI 1.0+ automatically reloads any segment registers containing the
  3813.       selector being modified
  3814.     not supported by MS Windows 3.0 in Standard mode
  3815. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  3816. SeeAlso: INT 21/AH=E9h"OS/286"
  3817. ----------310008-----------------------------
  3818. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  3819.     AX = 0008h
  3820.     BX = selector
  3821.     CX:DX = segment limit
  3822. Return: CF clear if successful
  3823.     CF set on error
  3824.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  3825. Notes:    CX must be zero for 16-bit DPMI implementations
  3826.     limits greater than 1MB must be page aligned (low 12 bits set)
  3827.     only modify descriptors allocated with INT 31/AX=0000h
  3828.     DPMI 1.0+ automatically reloads any segment registers containing the
  3829.       selector being modified
  3830.     not supported by MS Windows 3.0 in Standard mode
  3831. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  3832. ----------310009-----------------------------
  3833. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  3834.     AX = 0009h
  3835.     BX = selector
  3836.     CL = access rights/type byte
  3837.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  3838. Return: CF clear if successful
  3839.     CF set on error
  3840.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  3841. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  3842.     DPMI 1.0+ automatically reloads any segment registers containing the
  3843.       selector being modified
  3844.     not supported by MS Windows 3.0 in Standard mode
  3845. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h
  3846. ----------31000A-----------------------------
  3847. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  3848.     AX = 000Ah
  3849.     BX = selector
  3850. Return: CF clear if successful
  3851.         AX = new data selector
  3852.     CF set on error
  3853.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  3854. Notes:    fails if selector in BX is not a code segment or is invalid
  3855.     use INT 31/AX=0001h to free new selector
  3856.     future changes to the original selector will not be reflected in the
  3857.       returned alias selector
  3858.     not supported by MS Windows 3.0 in Standard mode
  3859. SeeAlso: AX=0001h
  3860. ----------31000B-----------------------------
  3861. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  3862.     AX = 000Bh
  3863.     BX = LDT selector
  3864.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  3865. Return: CF clear if successful
  3866.         buffer filled
  3867.     CF set on error
  3868.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  3869. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  3870.     not supported by MS Windows 3.0 in Standard mode
  3871. SeeAlso: AX=000Ch
  3872. ----------31000C-----------------------------
  3873. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  3874.     AX = 000Ch
  3875.     BX = LDT selector
  3876.     ES:(E)DI -> 8-byte buffer containing descriptor
  3877. Return:    CF clear if successful
  3878.     CF set on error
  3879.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  3880. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  3881.     only modify descriptors allocated with INT 31/AX=0000h
  3882.     DPMI 1.0+ automatically reloads any segment registers containing the
  3883.       selector being modified
  3884.     not supported by MS Windows 3.0 in Standard mode
  3885. SeeAlso: AX=000Bh
  3886. ----------31000D-----------------------------
  3887. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  3888.     AX = 000Dh
  3889.     BX = LDT selector
  3890. Return: CF clear if successful
  3891.         descriptor allocated
  3892.     CF set on error
  3893.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  3894. Notes:    free descriptor with INT 31/AX=0001h
  3895.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  3896.       some may already be in use by other applications under DPMI 0.9;
  3897.       DPMI 1.0 guarantees 16 descriptors per client
  3898.     not supported by MS Windows 3.0 in Standard mode
  3899. SeeAlso: AX=0000h,AX=0001h
  3900. ----------31000E-----------------------------
  3901. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  3902.     AX = 000Eh
  3903.     CX = number of descriptors to copy
  3904.     ES:(E)DI -> descriptor buffer (see below)
  3905. Return: CF clear if successful
  3906.         descriptors copied
  3907.     CF set on error
  3908.         AX = error code (8022h) (see AX=0000h)
  3909.         CX = number of descriptors successfully copied
  3910. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  3911.     if the function fails, the first CX descriptors are valid; the
  3912.       remainder are not modified
  3913. SeeAlso: AX=000Bh,AX=000Fh
  3914.  
  3915. Format of descriptor buffer entry (one per descriptor to get):
  3916. Offset    Size    Description
  3917.  00h    WORD    selector (set by client)
  3918.  02h    QWORD    descriptor (set by host)
  3919. ----------31000F-----------------------------
  3920. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  3921.     AX = 000Fh
  3922.     CX = number of descriptors to copy
  3923.     ES:(E)DI -> descriptor buffer (see below)
  3924. Return: CF clear if successful
  3925.         descriptors copied
  3926.     CF set on error
  3927.         AX = error code (8021h,8022h,8025h) (see AX=0000h)
  3928.         CX = number of descriptors successfully copied
  3929. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  3930.     if the function fails, the first CX descriptors are valid; the
  3931.       remainder are not modified
  3932.     DPMI 1.0+ automatically reloads any segment registers containing a
  3933.       selector being modified
  3934. SeeAlso: AX=000Ch,AX=000Eh
  3935.  
  3936. Format of descriptor buffer entry (one per descriptor to set):
  3937. Offset    Size    Description
  3938.  00h    WORD    selector
  3939.  02h    QWORD    descriptor
  3940. ----------310100-----------------------------
  3941. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  3942.     AX = 0100h
  3943.     BX = number of paragraphs to allocate
  3944. Return: CF clear if successful
  3945.         AX = real mode segment of allocated block
  3946.         DX = first selector for allocated block
  3947.     CF set on error
  3948.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  3949.          (DPMI 1.0+) DPMI error code (8011h) (see AX=0000h)
  3950.         BX = size (in paragraphs) of largest available block
  3951. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  3952.       if the caller is a 16-bit program
  3953.     never modify or deallocate returned descriptors
  3954.     not supported by MS Windows 3.0 in Standard mode
  3955. SeeAlso: AX=0101h,AX=0501h
  3956. ----------310101-----------------------------
  3957. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  3958.     AX = 0101h
  3959.     DX = selector of block
  3960. Return: CF set if successful
  3961.     CF set on error
  3962.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  3963. Notes:    all descriptors allocated for the block are automatically freed
  3964.     DPMI 1.0+ automatically zeros any segment registers containing a
  3965.       selector freed by this function
  3966.     not supported by MS Windows 3.0 in Standard mode
  3967. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  3968. ----------310102-----------------------------
  3969. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  3970.     AX = 0102h
  3971.     BX = new block size in paragraphs
  3972.     DX = selector of block
  3973. Return: CF clear if successful
  3974.     CF set on error
  3975.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  3976.          (DPMI 1.0+) DPMI error code (8011h,8022h) (see AX=0000h)
  3977.         BX = maximum block size (in paragraphs) possible
  3978. Notes:    increasing the size of a block past a 64K boundary will fail if the
  3979.       next descriptor in the LDT is already in use
  3980.     shrinking a block past a 64K boundary will cause some selectors to be
  3981.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  3982.       a selector freed by this function
  3983.     not supported by MS Windows 3.0 in Standard mode
  3984. SeeAlso: AX=0100h
  3985. ----------310200-----------------------------
  3986. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  3987.     AX = 0200h
  3988.     BL = interrupt number
  3989. Return: CF clear
  3990.     CX:DX = segment:offset of real mode interrupt handler
  3991. Note:    the DPMI implementation is required to support all 256 vectors
  3992. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  3993. ----------310201-----------------------------
  3994. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  3995.     AX = 0201h
  3996.     BL = interrupt number
  3997.     CX:DX = segment:offset of real mode handler
  3998. Return: CF clear
  3999. Note:    all memory that may be touched by a hardware interrupt handler must be
  4000.       locked down with INT 31/AX=0600h    
  4001. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  4002. ----------310202-----------------------------
  4003. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  4004.     AX = 0202h
  4005.     BL = exception number (00h-1Fh)
  4006. Return:    CF clear if successful
  4007.         CX:(E)DX = selector:offset of handler
  4008.     CF set on error
  4009.         AX = error code (DPMI 1.0+) (8021h) (see AX=0000h)
  4010. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  4011.     DPMI 1.0+ supports this function only for backward compatibility; use
  4012.        AX=0210h or AX=0211h instead
  4013.     not supported by MS Windows 3.0 in Standard mode
  4014. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  4015. ----------310203-----------------------------
  4016. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  4017.     AX = 0203h
  4018.     BL = exception number (00h-1Fh)
  4019.     CX:(E)DX = selector:offset of handler
  4020. Return: CF clear if successful
  4021.     CF set on error
  4022.         AX = error code (DPMI 1.0+) (8021h,8022h) (see AX=0000h)
  4023. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  4024.       stack frame on chaining to the next exception handler
  4025.     the handler should return using a FAR return
  4026.     all fault stack frames contain an error code, but it is only valid for
  4027.       exceptions 08h and 0Ah-0Eh
  4028.     handlers will only be called if the exception occurs in protected mode,
  4029.       and the DPMI host does not transparently handle the exception
  4030.     the handler may change certain values on the stack frame (see below)
  4031.     DPMI 1.0+ supports this function only for backward compatibility; use
  4032.        AX=0212h or AX=0213h instead
  4033.     not supported by MS Windows 3.0 in Standard mode
  4034. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  4035.  
  4036. Format of stack frame for 16-bit programs: (offset from SS:SP)
  4037. Offset    Size    Description
  4038.  00h    DWORD    return CS:IP (do not change)
  4039.  04h    WORD    error code
  4040.  06h    DWORD    CS:IP of exception
  4041.  0Ah    WORD    flags
  4042.  0Ch    DWORD    SS:SP
  4043.  
  4044. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  4045. Offset    Size    Description
  4046.  00h    DWORD    return EIP (do not change)
  4047.  04h    WORD    return CS selector (do not change)
  4048.  06h    WORD    reserved (do not change)
  4049.  08h    DWORD    error code
  4050.  0Ch    DWORD    EIP of exception
  4051.  10h    WORD    CS selector of exception
  4052.  12h    WORD    reserved (do not change)
  4053.  14h    DWORD    EFLAGS
  4054.  18h    DWORD    ESP
  4055.  1Ch    WORD    SS
  4056.  1Eh    WORD    reserved (do not change)
  4057. ----------310204-----------------------------
  4058. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  4059.     AX = 0204h
  4060.     BL = interrupt number
  4061. Return:    CF clear
  4062.     CX:(E)DX = selector:offset of handler
  4063. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4064.     DPMI implementations are required to support all 256 vectors
  4065.     not supported by MS Windows 3.0 in Standard mode
  4066. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2F/AX=FB42h/BX=0024h
  4067. ----------310205-----------------------------
  4068. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  4069.     AX = 0205h
  4070.     BL = interrupt number
  4071.     CX:(E)DX = selector:offset of handler
  4072. Return: CF clear if successful
  4073.     CF set on error
  4074.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4075. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4076.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  4077.       to the next handler
  4078.     DPMI implementations are required to support all 256 vectors
  4079.     hardware interrupts are reflected to the virtual machine's primary
  4080.       client, software interrupts to the current client
  4081.     not supported by MS Windows 3.0 in Standard mode
  4082. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2F/AX=FB42h/BX=0025h
  4083. ----------310210-----------------------------
  4084. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4085.     AX = 0210h
  4086.     BL = exception number (00h-1Fh)
  4087. Return: CF clear if successful
  4088.         CX:(EDX) = selector:offset of exception handler
  4089.     CF set on error
  4090.         AX = error code (8021h) (see AX=0000h)
  4091. Note:    DPMI host reflects exception to current client's handler
  4092. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  4093. ----------310211-----------------------------
  4094. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4095.     AX = 0211h
  4096.     BL = exception number (00h-1Fh)
  4097. Return: CF clear if successful
  4098.         CX:(EDX) = selector:offset of exception handler
  4099.     CF set on error
  4100.         AX = error code (8021h) (see AX=0000h)
  4101. Notes:    returns address of protected-mode handler for real-mode exception
  4102.     DPMI host performs a switch to protected mode, reflects the exception
  4103.       to the virtual machine's primary client, and returns to real mode
  4104.       on the handler's completion
  4105. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  4106. ----------310212-----------------------------
  4107. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4108.     AX = 0212h
  4109.     BL = exception or fault number (00h-1Fh)
  4110.     CX:(E)DX = exception handler selector:offset
  4111. Return: CF clear if successful
  4112.     CF set on error
  4113.         AX = error code (8021h,8022h) (see AX=0000h)
  4114. Note:    DPMI host sends exception to current client's handler
  4115. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  4116. ----------310213-----------------------------
  4117. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4118.     AX = 0213h
  4119.     BL = exception or fault number (00h-1Fh)
  4120.     CX:(E)DX = exception handler selector:offset
  4121. Return: CF clear if successful
  4122.     CF set on error
  4123.         AX = error code (8021h,8022h) (see AX=0000h)
  4124. Notes:    specifies address of protected-mode handler for real-mode exception
  4125.     DPMI host performs a switch to protected mode, reflects the exception
  4126.       to the virtual machine's primary client, and returns to real mode
  4127.       on the handler's completion
  4128. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  4129. ----------310300-----------------------------
  4130. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  4131.     AX = 0300h
  4132.     BL = interrupt number
  4133.     BH = flags
  4134.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4135.            reserved, must be 0 (DPMI 1.0+)
  4136.         others must be 0
  4137.     CX = number of words to copy from protected mode to real mode stack
  4138.     ES:(E)DI = selector:offset of real mode call structure (see below)
  4139. Return:    CF clear if successful
  4140.         real mode call structure modified (all fields except SS:SP, CS:IP
  4141.           filled with return values from real mode interrupt)
  4142.     CF set on error
  4143.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4144.     protected mode stack unchanged
  4145. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4146.     CS:IP in the real mode call structure is ignored for this call,
  4147.       instead, the indicated interrupt vector is used for the address
  4148.     the flags in the call structure are pushed on the real mode stack to
  4149.       form an interrupt stack frame, and the trace and interrupt flags are
  4150.       clear on entry to the handler
  4151.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4152.     the real mode handler must return with the stack in the same state as
  4153.       it was on being called
  4154. SeeAlso: AX=0302h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  4155. SeeAlso: INT 2F/AX=FB42h/BX=000Dh
  4156.  
  4157. Format of real mode call structure:
  4158. Offset    Size    Description
  4159.  00h    DWORD    EDI
  4160.  04h    DWORD    ESI
  4161.  08h    DWORD    EBP
  4162.  0Ch    DWORD    reserved (00h)
  4163.  10h    DWORD    EBX
  4164.  14h    DWORD    EDX
  4165.  18h    DWORD    ECX
  4166.  1Ch    DWORD    EAX
  4167.  20h    WORD    flags
  4168.  22h    WORD    ES
  4169.  24h    WORD    DS
  4170.  26h    WORD    FS
  4171.  28h    WORD    GS
  4172.  2Ah    WORD    IP
  4173.  2Ch    WORD    CS
  4174.  2Eh    WORD    SP
  4175.  30h    WORD    SS
  4176. ----------310301-----------------------------
  4177. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  4178.     AX = 0301h
  4179.     BH = flags
  4180.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4181.            reserved, must be 0 (DPMI 1.0+)
  4182.         others must be 0
  4183.     CX = number of words to copy from protected mode to real mode stack
  4184.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4185.             (see INT 31/AX=0300h)
  4186. Return: CF clear if successful
  4187.         real mode call structure modified (all fields except SS:SP, CS:IP
  4188.           filled with return values from real mode interrupt)
  4189.     CF set on error
  4190.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4191.     protected mode stack unchanged
  4192. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4193.     the real mode procedure must exit with a FAR return
  4194.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4195.     the real mode handler must return with the stack in the same state as
  4196.       it was on being called
  4197. SeeAlso: AX=0300h,AX=0302h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  4198. ----------310302-----------------------------
  4199. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  4200.     AX = 0302h
  4201.     BH = flags
  4202.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4203.            reserved, must be 0 (DPMI 1.0+)
  4204.         others must be 0
  4205.     CX = number of words to copy from protected mode to real mode stack
  4206.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4207.             (see INT 31/AX=0300h)
  4208. Return:    CF clear if successful
  4209.         real mode call structure modified (all fields except SS:SP, CS:IP
  4210.           filled with return values from real mode interrupt)
  4211.     CF set on error
  4212.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4213.     protected mode stack unchanged
  4214. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4215.     the flags in the call structure are pushed on the real mode stack to
  4216.       form an interrupt stack frame, and the trace and interrupt flags are
  4217.       clear on entry to the handler
  4218.     the real mode procedure must exit with an IRET
  4219.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4220.     the real mode handler must return with the stack in the same state as
  4221.       it was on being called
  4222. SeeAlso: AX=0300h
  4223. ----------310303-----------------------------
  4224. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  4225.     AX = 0303h
  4226.     DS:SI / DS:ESI = selector:offset of procedure to call
  4227.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4228.             (see AX=0300h)
  4229. Return: CF clear if successful
  4230.         CX:DX = segment:offset of real mode call address
  4231.     CF set on error
  4232.         AX = error code (DPMI 1.0+) (8015h) (see AX=0000h)
  4233. Notes:    the real mode call structure is static, causing reentrancy problems;
  4234.       its contents are only valid at the time of a callback
  4235.     the called procedure must modify the real mode CS:IP before returning
  4236.     values are returned to real mode by modifying the real mode call struc
  4237.     DPMI hosts must provide at least 16 callbacks per client
  4238. SeeAlso: AX=0304h,AX=0C00h
  4239.  
  4240. Values callback procedure is called with:
  4241.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  4242.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4243.     SS:SP / SS:ESP = locked protected mode API stack
  4244.     interrupts disabled
  4245. Return: (with IRET)
  4246.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  4247. ----------310304-----------------------------
  4248. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  4249.     AX = 0304h
  4250.     CX:DX = real mode callback address
  4251. Return: CF clear if successful
  4252.     CF set on error
  4253.         AX = error code (DPMI 1.0+) (8024h) (see AX=0000h)
  4254. SeeAlso: AX=0303h
  4255. ----------310305-----------------------------
  4256. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  4257.     AX = 0305h
  4258. Return: CF clear
  4259.     AX = size in bytes of state buffer
  4260.     BX:CX = real mode address of procedure to save/restore state
  4261.     SI:DI / SI:EDI = protected mode procedure to save/restore state
  4262. Notes:    the buffer size will be zero if it is not necessary to preserve state
  4263.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  4264.     this function is only needed if using the raw mode switch service
  4265. SeeAlso: AX=0306h
  4266.  
  4267. Values to call state-save procedures with:
  4268.     AL = direction
  4269.         00h save state
  4270.         01h restore state
  4271.     ES:DI / ES:EDI -> state buffer
  4272. Return: all registers preserved
  4273. ----------310306-----------------------------
  4274. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  4275.     AX = 0306h
  4276. Return:    CF clear
  4277.     BX:CX -> procedure to switch from real to protected mode
  4278.     SI:DI / SI:EDI -> procedure to switch from protected to real mode
  4279. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  4280.     the caller must save and restore the state of the task with AX=0305h
  4281.     not supported by MS Windows 3.0 in Standard mode
  4282. SeeAlso: AX=0305h
  4283.  
  4284. Values to JUMP at mode-switch procedures with:
  4285.     AX = new DS
  4286.     CX = new ES
  4287.     DX = new SS
  4288.     BX / EBX = new SP / ESP
  4289.     SI = new CS
  4290.     DI / EDI = new IP / EIP
  4291. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  4292.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  4293.     interrupts will stay disabled during the entire mode switch if they
  4294.       are disabled on entry to the mode-switch procedure
  4295. ----------310400-----------------------------
  4296. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  4297.     AX = 0400h
  4298. Return: CF clear
  4299.     AH = major version of DPMI spec supported
  4300.     AL = two-digit minor version of DPMI spec supported
  4301.     BX = flags
  4302.         bit 0: running under an 80386 (32-bit) implementation
  4303.         bit 1: processor returns to real mode for reflected interrupts
  4304.            instead of V86 mode
  4305.         bit 2: virtual memory supported
  4306.         bit 3: reserved (undefined)
  4307.         others reserved (zero)
  4308.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4309.     DH = curr value of virtual master interrupt controller base interrupt
  4310.     DL = curr value of virtual slave interrupt controller base interrupt
  4311. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 67/AX=DE0Ah
  4312. ----------310401-----------------------------
  4313. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  4314.     AX = 0401h
  4315.     ES:(E)DI -> 128-byte buffer (see below)
  4316. Return: CF clear if successful
  4317.         AX = capabilities
  4318.         bit 0: paged accessed/dirty supported (see AX=0506h,AX=0507h)
  4319.             1: exceptions restartability supported
  4320.             2: device mapping supported (see AX=0508h)
  4321.             3: conventional memory mapping supported (see AX=0509h)
  4322.             4: demand zero-fill supported
  4323.             5: write-protect client capability supported
  4324.             6: write-protect host capability supported
  4325.             7-15: reserved
  4326.         CX = reserved (00h)
  4327.         DX = reserved (00h)
  4328.         buffer filled
  4329.     CF set on error (DPMI 0.9 only)
  4330. SeeAlso: AX=0400h
  4331.  
  4332. Format of buffer:
  4333. Offset    Size    Description
  4334.  00h    BYTE    host major version number
  4335.  01h    BYTE    host minor version number
  4336.  02h 126 BYTEs    ASCIZ host vendor name
  4337. ----------310500-----------------------------
  4338. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  4339.     AX = 0500h
  4340.     ES:DI / ES:EDI -> buffer for memory information (see below)
  4341. Return: CF clear
  4342. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  4343.     this function must be considered advisory because other applications
  4344.       may affect the results at any time after the call
  4345.     fields not supported by the DPMI implementation are filled with
  4346.       FFFFFFFFh
  4347.     DPMI 1.0+ supports this function solely for backward compatibility; use
  4348.       AX=050Bh instead
  4349. SeeAlso: AX=0501h,AX=0604h
  4350.  
  4351. Format of memory information:
  4352. Offset    Size    Description
  4353.  00h    DWORD    largest available block in bytes
  4354.  04h    DWORD    maximum unlocked page allocation
  4355.  08h    DWORD    maximum locked page allocation
  4356.  0Ch    DWORD    total linear address space in pages
  4357.  10h    DWORD    total unlocked pages
  4358.  14h    DWORD    free pages
  4359.  18h    DWORD    total physical pages
  4360.  1Ch    DWORD    free linear address space in pages
  4361.  20h    DWORD    size of paging file/partition in pages
  4362.  24h 12 BYTEs    reserved
  4363. ----------310501-----------------------------
  4364. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  4365.     AX = 0501h
  4366.     BX:CX = size in bytes
  4367. Return: CF clear if successful
  4368.         BX:CX = linear address of block
  4369.         SI:DI = memory block handle for resizing and freeing block
  4370.     CF set on error
  4371.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see AX=0000h)
  4372. Notes:    no selectors are allocated
  4373.     the memory block is allocated unlocked (can be locked with AX=0600h)
  4374.     allocations are often page granular (see AX=0604h)
  4375. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  4376. ----------310502-----------------------------
  4377. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  4378.     AX = 0502h
  4379.     SI:DI = handle of memory block
  4380. Return: CF clear if successful
  4381.     CF set on error
  4382.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4383. Note:    any selectors allocated for the memory block must also be freed,
  4384.       preferably before freeing the memory block
  4385. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  4386. ----------310503-----------------------------
  4387. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  4388.     AX = 0503h
  4389.     BX:CX = new size in bytes (nonzero)
  4390.     SI:DI = handle of memory block
  4391. Return: CF clear if successful
  4392.         BX:CX = new linear address
  4393.         SI:DI = new handle of memory block
  4394.     CF set on error
  4395.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  4396.         (see AX=0000h)
  4397. Notes:    any selectors pointing at the block must be updated
  4398.     the previous memory block handle becomes invalid
  4399.     an error is returned if the new size is 0
  4400. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  4401. ----------310504-----------------------------
  4402. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  4403.     AX = 0504h
  4404.     EBX = page-aligned linear address of memory block (00000000h if any
  4405.         address is acceptable)
  4406.     ECX = size in bytes (nonzero)
  4407.     EDX = flags
  4408.         bit 0: set to create committed pages instead of uncommitted pages
  4409.         bits 1-31: reserved (0)
  4410. Return: CF clear if successful
  4411.         EBX = linear address of memory block
  4412.         ESI = memory block handle
  4413.     CF set on error
  4414.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see AX=0000h)
  4415. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4416. SeeAlso: AX=0501h,AX=0505h
  4417. ----------310505-----------------------------
  4418. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  4419.     AX = 0505h
  4420.     ESI = memory block handle
  4421.     ECX = new size in bytes (nonzero)
  4422.     EDX = flags
  4423.         bit 0: create committed pages rather than uncommitted pages
  4424.         bit 1: segment descriptor update required
  4425.         ES:EBX -> buffer containing array of WORDs with selectors
  4426.         EDI = number of selectors in array
  4427.         bits 2-31: reserved (0)
  4428. Return: CF clear if successful
  4429.         EBX = new linear base address
  4430.         ESI = new memory block handle
  4431.     CF set on error
  4432.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see AX=0000h)
  4433. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4434.     the old memory block handle becomes invalid
  4435.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  4436.       all descriptors for selectors in the update buffer which fall within
  4437.       the memory block
  4438. SeeAlso: AX=0503h,AX=0504h
  4439. ----------310506-----------------------------
  4440. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  4441.     AX = 0506h
  4442.     ESI = memory block handle
  4443.     EBX = offset in memory block of first page
  4444.     ECX = number of pages
  4445.     ES:EDX -> array of WORDs to hold page attributes (see below)
  4446. Return: CF clear if successful
  4447.         buffer filled
  4448.     CF set on error
  4449.         AX = error code (8001h,8023h,8025h) (see AX=0000h)
  4450. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4451.     if EBX is not page-aligned, it will be rounded down
  4452. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  4453.  
  4454. Format of page attribute words:
  4455.  bits 0-2    page type
  4456.         000 uncommitted
  4457.         001 committed
  4458.         010 mapped (see AX=0508h,AX=0509h)
  4459.         other currently unused
  4460.  bit 3        page is read/write rather than read-only
  4461.  bit 4        accessed/dirty bits supplied in bits 5 and 6
  4462.  bit 5        page has been accessed (only valid if bit 4 set)
  4463.  bit 6        page has been written (only valid if bit 4 set)
  4464.  bits 7-15    reserved (0)
  4465. ----------310507-----------------------------
  4466. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  4467.     AX = 0507h
  4468.     ESI = memory block handle
  4469.     EBX = offset in memory block of first page
  4470.     ECX = number of pages
  4471.     ES:EDX -> array of WORDs with new page attributes (see AX=0506h)
  4472. Return: CF clear if successful
  4473.     CF set on error
  4474.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  4475.         (see AX=0000h)
  4476.         ECX = number of pages which have been set
  4477. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4478.     if EBX is not page-aligned, it will be rounded down
  4479. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  4480. ----------310508-----------------------------
  4481. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  4482.     AX = 0508h
  4483.     ESI = memory block handle
  4484.     EBX = page-aligned offset within memory block of page(s) to be mapped
  4485.     ECX = number of pages to map
  4486.     EDX = page-aligned physical address of device
  4487. Return: CF clear if successful
  4488.     CF set on error
  4489.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  4490. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4491.     support of this function is optional; hosts are also allowed to support
  4492.       the function for some devices but not others
  4493. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  4494. ----------310509-----------------------------
  4495. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  4496.     AX = 0509h
  4497.     ESI = memory block handle
  4498.     EBX = page-aligned offset within memory block of page(s) to map
  4499.     ECX = number of pages to map
  4500.     EDX = page-aligned linear address of conventional (below 1M) memory
  4501. Return: CF clear if successful
  4502.     CF set on error
  4503.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  4504. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  4505.     support of this function is optional
  4506. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  4507. ----------31050A-----------------------------
  4508. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  4509.     AX = 050AH
  4510.     SI:DI = memory block handle
  4511. Return: CF clear if successful
  4512.         SI:DI = size in bytes
  4513.         BX:CX = base address
  4514.     CF set on error
  4515.         AX = error code (8023h) (see AX=0000h)
  4516. SeeAlso: AX=0501h,AX=0504h
  4517. ----------31050B-----------------------------
  4518. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  4519.     AX = 050Bh
  4520.     ES:(E)DI -> 128-byte buffer for memory information (see below)
  4521. Return: CF clear if successful
  4522.     CF set on error (DPMI 0.9 only)
  4523. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  4524. SeeAlso: AX=0500h
  4525.  
  4526. Format of memory information:
  4527. Offset    Size    Description
  4528.  00h    DWORD    total allocated bytes of physical memory controlled by host
  4529.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  4530.  08h    DWORD    total available bytes of virtual memory controlled by host
  4531.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  4532.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  4533.  14h    DWORD    total allocated bytes of virtual memory for current client
  4534.  18h    DWORD    total available bytes of virtual memory for current client
  4535.  1Ch    DWORD    total locked bytes for current client
  4536.  20h    DWORD    maximum locked bytes for current client
  4537.  24h    DWORD    highest linear address available to current client
  4538.  28h    DWORD    largest available memory block in bytes
  4539.  2Ch    DWORD    minimum allocation unit in bytes
  4540.  30h    DWORD    allocation alignment unit size in bytes
  4541.  34h 76 BYTEs    reserved (00h)
  4542. ----------310600-----------------------------
  4543. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  4544.     AX = 0600h
  4545.     BX:CX = starting linear address
  4546.     SI:DI = size of region in bytes
  4547. Return: CF clear if successful
  4548.     CF set on error
  4549.         none of the memory is locked
  4550.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see AX=0000h)
  4551. Notes:    pages at beginning and end will be locked if the region overlaps them
  4552.     may be called multiple times for a given page; the DPMI host keeps a
  4553.       lock count for each page
  4554. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  4555. ----------310601-----------------------------
  4556. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  4557.     AX = 0601h
  4558.     BX:CX = starting linear address
  4559.     SI:DI = size of region in bytes
  4560. Return: CF clear if successful
  4561.     CF set on error
  4562.         none of the memory is unlocked
  4563.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  4564. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  4565.     memory whose lock count has not reached zero remains locked
  4566. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  4567. ----------310602-----------------------------
  4568. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  4569.     AX = 0602h
  4570.     BX:CX = starting linear address
  4571.     SI:DI = size of region in bytes
  4572. Return: CF clear if successful
  4573.     CF set on error    
  4574.         none of the memory is made pageable
  4575.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  4576. Notes:    must relock all unlocked real mode memory before terminating process
  4577.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  4578.     pages at beginning and end will be unlocked if the region overlaps them
  4579.     pageability of real mode pages is binary, not a count
  4580. SeeAlso: AX=0600h,AX=0603h
  4581. ----------310603-----------------------------
  4582. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  4583.     AX = 0603h
  4584.     BX:CX = starting linear address
  4585.     SI:DI = size of region in bytes
  4586. Return: CF clear if successful
  4587.     CF set on error    
  4588.         none of the memory is relocked
  4589.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see AX=0000h)
  4590. Notes:    pages at beginning and end will be relocked if the region overlaps them
  4591.     pageability of real mode pages is binary, not a count
  4592. SeeAlso: AX=0602h
  4593. ----------310604-----------------------------
  4594. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  4595.     AX = 0604h
  4596. Return: CF clear if successful
  4597.         BX:CX = page size in bytes
  4598.     CF set on error
  4599.         AX = error code (DPMI 1.0+)
  4600.         8001h unsupported, 16-bit host
  4601. ----------310700-----------------------------
  4602. INT 31 P - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  4603.     AX = 0700h
  4604.     BX:CX = starting linear page number
  4605.     SI:DI = number of pages to mark as paging candidates
  4606. Return: ???
  4607. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4608.       specification, this function is called by MS Windows TASKMAN,
  4609.       PROGMAN, and KERNEL
  4610. SeeAlso: AX=0701h,AX=0702h
  4611. ----------310701-----------------------------
  4612. INT 31 P - DPMI 0.9+ - DISCARD PAGES
  4613.     AX = 0701h
  4614.     BX:CX = starting linear page number
  4615.     SI:DI = number of pages to discard
  4616. Return: ???
  4617. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4618.       specification, this function is called by MS Windows TASKMAN,
  4619.       PROGMAN, and KERNEL
  4620. SeeAlso: AX=0700h,AX=0703h
  4621. ----------310702-----------------------------
  4622. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  4623.     AX = 0702h
  4624.     BX:CX = starting linear address
  4625.     SI:DI = number of bytes to mark as paging candidates
  4626. Return: CF clear if successful
  4627.     CF set on error
  4628.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  4629. Notes:    this function is advisory, and does not force immediate paging
  4630.     partial pages will not be discarded
  4631. SeeAlso: AX=0700h,AX=0703h
  4632. ----------310703-----------------------------
  4633. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  4634.     AX = 0703h
  4635.     BX:CX = starting linear address
  4636.     SI:DI = number of bytes to mark as discarded
  4637. Return: CF clear if successful
  4638.     CF set on error
  4639.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  4640. Notes:    this function is advisory, and may be ignored by DPMI implementations
  4641.     partial pages will not be discarded
  4642. SeeAlso: AX=0701h,AX=0702h
  4643. ----------310800-----------------------------
  4644. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  4645.     AX = 0800h
  4646.     BX:CX = physical address (should be above 1 MB)
  4647.     SI:DI = size in bytes
  4648. Return:    CF clear if successful
  4649.         BX:CX = linear address which maps the requested physical memory
  4650.     CF set on error
  4651.         AX = error code (DPMI 1.0+) (8003h,8021h) (see AX=0000h)
  4652. Notes:    implementations may refuse this call because it can circumvent protects
  4653.     the caller must build an appropriate selector for the memory
  4654.     do not use for memory mapped in the first megabyte
  4655. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  4656. ----------310801-----------------------------
  4657. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  4658.     AX = 0801h
  4659.     BX:CX = linear address returned by AX=0800h
  4660. Return: CF clear if successful
  4661.     CF set on error
  4662.         AX = error code (8025h) (see AX=0000h)
  4663. Note:    should be called at end of access to device mapped with AX=0800h
  4664. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  4665. ----------310900-----------------------------
  4666. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  4667.     AX = 0900h
  4668. Return: CF clear
  4669.     virtual interrupts disabled
  4670.     AL = 00h if previously disabled
  4671.        = 01h if previously enabled
  4672.     AH preserved
  4673. Notes:    the previous state may be restored simply by executing another INT 31
  4674.     a CLI instruction may be used if the previous state is unimportant,
  4675.       but should be assumed to be very slow due to trapping by the host
  4676. SeeAlso: AX=0901h,AX=0902h
  4677. ----------310901-----------------------------
  4678. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  4679.     AX = 0901h
  4680. Return: CF clear
  4681.     virtual interrupts enabled
  4682.     AL = 00h if previously disabled
  4683.        = 01h if previously enabled
  4684.     AH preserved
  4685. Notes:    the previous state may be restored simply by executing another INT 31
  4686.     a STI instruction may be used if the previous state is unimportant,
  4687.       but should be assumed to be very slow due to trapping by the host
  4688. SeeAlso: AX=0900h,AX=0902h
  4689. ----------310902-----------------------------
  4690. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  4691.     AX = 0902h
  4692. Return: CF clear
  4693.     AL = 00h if disabled
  4694.        = 01h if enabled
  4695. Note:    should be used rather than PUSHF because that instruction yields the
  4696.       physical interrupt state rather than the per-client virtualized
  4697.       interrupt flag
  4698. SeeAlso: AX=0900h,AX=0901h
  4699. ----------310A00-----------------------------
  4700. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  4701.     AX = 0A00h
  4702.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  4703. Return: CF clear if successful
  4704.         ES:DI / ES:EDI -> FAR extended API entry point
  4705.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  4706.     CF set on error
  4707.         AX = error code (DPMI 1.0+) (8001h) (see AX=0000h)
  4708. Notes:    extended API parameters are vendor-specific
  4709.     DPMI 1.0+ supports this function solely for backward compatibility; use
  4710.       INT 2F/AX=168Ah instead
  4711. SeeAlso: INT 2F/AX=168Ah
  4712. ----------310B00-----------------------------
  4713. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  4714.     AX = 0B00h
  4715.     BX:CX = linear address
  4716.     DL = size (1,2,4 bytes)
  4717.     DH = type (00h execute, 01h write, 02h read/write)
  4718. Return: CF clear if successful
  4719.         BX = watchpoint handle
  4720.     CF set on error
  4721.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see AX=0000h)
  4722. SeeAlso: AX=0212h,AX=0601h
  4723. ----------310B01-----------------------------
  4724. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  4725.     AX = 0B01h
  4726.     BX = watchpoint handle
  4727. Return: CF clear if successful
  4728.     CF set on error
  4729.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4730. Note:    the watchpoint handle is freed
  4731. SeeAlso: AX=0B00h
  4732. ----------310B02-----------------------------
  4733. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  4734.     AX = 0B02h
  4735.     BX = watchpoint handle
  4736. Return: CF clear if successful
  4737.         AX = status flags
  4738.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  4739.     CF set on error
  4740.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4741. SeeAlso: AX=0B00h,AX=0B03h
  4742. ----------310B03-----------------------------
  4743. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  4744.     AX = 0B03h
  4745.     BX = watchpoint handle
  4746. Return: CF clear if successful
  4747.     CF set on error
  4748.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4749. SeeAlso: AX=0B02h
  4750. ----------310C00-----------------------------
  4751. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  4752.     AX = 0C00h
  4753.     ES:(E)DI -> resident service provider structure (see below)
  4754. Return: CF clear if successful
  4755.     CF set on error
  4756.         AX = error code (8015h,8021h,8025h) (see AX=0000h)
  4757. Note:    calling this function declares an intent to provide resident
  4758.       protected mode services after terminating with AX=0C01h
  4759. SeeAlso: AX=0303h,AX=0C01h
  4760.  
  4761. Format of resident service provider structure:
  4762. Offset    Size    Description
  4763.  00h    QWORD    descriptor for 16-bit data segment
  4764.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  4765.  10h    WORD    offset of 16-bit callback procedure
  4766.  12h  2 BYTEs    reserved
  4767.  14h    QWORD    descriptor for 32-bit data segment
  4768.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  4769.  24h    DWORD    offset of 32-bit callback procedure
  4770. ----------310C01-----------------------------
  4771. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  4772.     AX = 0C01h
  4773.     BL = return code
  4774.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  4775. Return: never
  4776. Notes:    should only be used if the program will only provide services to
  4777.       other DPMI programs
  4778.     any protected mode memory remains allocated to the program unless
  4779.       explicitly freed before this call
  4780.     must first call AX=0C00h or program will simply be terminated
  4781. SeeAlso: AX=0C00h,INT 21/AH=31h
  4782. ----------310D00-----------------------------
  4783. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  4784.     AX = 0D00h
  4785.     ES:(E)DI -> shared memory allocation request structure (see below)
  4786. Return: CF clear if successful
  4787.         request structure updated
  4788.     CF set on error
  4789.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see AX=0000h)
  4790. Note:    first 16 bytes of memory block will be initialized to zeros on the
  4791.       first allocation
  4792. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  4793.  
  4794. Format of shared memory allocation request structure:
  4795. Offset    Size    Description
  4796.  00h    DWORD    requested length of shared memory block in bytes
  4797.  04h    DWORD    (return) allocated length of block
  4798.  08h    DWORD    (return) shared memory handle
  4799.  0Ch    DWORD    (return) linear address of memory block
  4800.  10h  6 BYTEs    selector:offset32 of ASCIZ name for memory block
  4801.         (name max 128 bytes)
  4802.  16h  2 BYTEs    reserved
  4803.  18h  4 BYTEs    reserved (00h)
  4804. ----------310D01-----------------------------
  4805. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  4806.     AX = 0D01h
  4807.     SI:DI = shared memory block handle
  4808. Return: CF clear if successful
  4809.     CF set on error
  4810.         AX = error code (8023h) (see AX=0000h)
  4811. Notes:    handle becomes invalid after this call
  4812.     DPMI maintains separate global and virtual machine use counts for each
  4813.       shared memory block; when the global use counts reaches zero, the
  4814.       block is finally destroyed
  4815. SeeAlso: AX=0502h,AX=0D00h
  4816. ----------310D02-----------------------------
  4817. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  4818.     AX = 0D02h
  4819.     SI:DI = shared memory block handle
  4820.     DX = flags
  4821.         bit 0: return immediately rather than suspending if serialization
  4822.             unavailable
  4823.         1: shared rather than exclusive serialization
  4824.         2-15: reserved (0)
  4825. Return: CF clear if successful
  4826.     CF set on error
  4827.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see AX=0000h)
  4828. Notes:    an exclusive serialization blocks any other serialization attempts for
  4829.       the same block by another virtual machine; a shared serialization
  4830.       blocks attempts at exclusive serialization by another virtual machine
  4831.     hosts are not required to detect deadlock
  4832.     a client's interrupt handler can cancel a serialization call which
  4833.       caused it to block by calling AX=0D03h
  4834. SeeAlso: AX=0D00h,AX=0D03h
  4835. ----------310D03-----------------------------
  4836. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  4837.     AX = 0D03h
  4838.     SI:DI = shared memory block handle
  4839.     DX = flags
  4840.         bit 0: release shared serialization rather than exclusive serialztn
  4841.         bit 1: free pending serialization
  4842.         bits 2-15: reserved (0)
  4843. Return: CF clear if successful
  4844.     CF set on error
  4845.         AX = error code (8002h,8023h) (see AX=0000h)
  4846. SeeAlso: AX=0D00h,AX=0D02h
  4847. ----------310E00-----------------------------
  4848. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  4849.     AX = 0E00h
  4850. Return: CF clear
  4851.     AX = coprocessor status
  4852.         bit 0: numeric coprocessor enabled for current client
  4853.         bit 1: client is emulating coprocessor
  4854.         bit 2: numeric coprocessor is present
  4855.         bit 3: host is emulating coprocessor instructions
  4856.         bits 4-7: coprocessor type
  4857.         0000 none
  4858.         0010 80287
  4859.         0011 80387
  4860.         0100 80486 with numeric coprocessor
  4861.         other reserved
  4862.         bits 8-15: not used
  4863. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  4864. SeeAlso: AX=0E01h
  4865. ----------310E01-----------------------------
  4866. INT 31 P - DPMI 1.0+ - SET EMULATION
  4867.     AX = 0E01h
  4868.     BX = coprocessor flag bits
  4869.         bit 0: enable numeric coprocessor for current client
  4870.         bit 1: client will emulate coprocessor
  4871.         bits 2-15: not used
  4872. Return: CF clear if successful
  4873.     CF set on error
  4874.         AX = error code (8026h) (see AX=0000h)
  4875. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  4876. SeeAlso: AX=0E00h
  4877. ----------32---------------------------------
  4878. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  4879. SeeAlso: INT 60"VIRUS"
  4880. ----------330000-----------------------------
  4881. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  4882.     AX = 0000h
  4883. Return: AX = status
  4884.         0000h hardware/driver not installed
  4885.         FFFFh hardware/driver installed
  4886.     BX = number of buttons
  4887.         0000h other than two
  4888.         0002h two buttons (many drivers)
  4889.         0003h Mouse Systems/Logitech three-button mouse
  4890.         FFFFh two buttons
  4891. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  4892.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  4893.       and then call this function.    Logitech drivers v5.01 and v6.00
  4894.       reportedly do not correctly use Hercules graphics in dual-monitor
  4895.       systems, while version 4.10 does.
  4896.     the Logitech mouse driver contains the signature string "LOGITECH" 
  4897.       three bytes past the interrupt handler; many of the Logitech mouse
  4898.       utilities check for this signature.
  4899. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  4900. ----------330001-----------------------------
  4901. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  4902.     AX = 0001h
  4903. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh
  4904. ----------330002-----------------------------
  4905. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  4906.     AX = 0002h
  4907. Note:    multiple calls to hide the cursor will require multiple calls to
  4908.       function 01h to unhide it.
  4909. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  4910. ----------330003-----------------------------
  4911. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  4912.     AX = 0003h
  4913. Return: BX = button status
  4914.        bit 0  left button pressed if 1
  4915.        bit 1  right button pressed if 1
  4916.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4917.     CX = column
  4918.     DX = row
  4919. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  4920. ----------330004-----------------------------
  4921. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  4922.     AX = 0004h
  4923.     CX = column
  4924.     DX = row
  4925. Note:    the row and column are truncated to the next lower multiple of the cell
  4926.       size; however, some versions of the Microsoft documentation
  4927.       incorrectly state that the coordinates are rounded
  4928. SeeAlso: AX=0003h,INT 62/AX=0081h
  4929. ----------330005-----------------------------
  4930. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  4931.     AX = 0005h
  4932.     BX = button
  4933.         0000h left
  4934.         0001h right
  4935.         0002h middle (Mouse Systems/Logitech mouse)
  4936. Return: AX = button states
  4937.         bit 0 left button pressed if 1
  4938.         bit 1 right button pressed if 1
  4939.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4940.     BX = number of times specified button has been pressed since last call
  4941.     CX = column at time specified button was last pressed
  4942.     DX = row at time specified button was last pressed
  4943. SeeAlso: AX=0006h,INT 62/AX=007Ch
  4944. ----------330006-----------------------------
  4945. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  4946.     AX = 0006h
  4947.     BX = button
  4948.         0000h left
  4949.         0001h right
  4950.         0002h middle (Mouse Systems/Logitech mouse)
  4951. Return: AX = button states
  4952.         bit 0 left button pressed if 1
  4953.         bit 1 right button pressed if 1
  4954.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4955.     BX = number of times specified button has been released since last call
  4956.     CX = column at time specified button was last released
  4957.     DX = row at time specified button was last released
  4958. SeeAlso: AX=0005h,INT 62/AX=007Ch
  4959. ----------330007-----------------------------
  4960. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  4961.     AX = 0007h
  4962.     CX = minimum column
  4963.     DX = maximum column
  4964. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  4965. ----------330008-----------------------------
  4966. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  4967.     AX = 0008h
  4968.     CX = minimum row
  4969.     DX = maximum row
  4970. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  4971. ----------330009-----------------------------
  4972. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  4973.     AX = 0009h
  4974.     BX = column of cursor hot spot in bitmap (-16 to 16)
  4975.     CX = row of cursor hot spot (-16 to 16)
  4976.     ES:DX -> bitmap
  4977.         16 words screen mask
  4978.         16 words cursor mask
  4979.             each word defines the sixteen pixels of a row, low bit
  4980.             rightmost
  4981. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh
  4982. ----------33000A-----------------------------
  4983. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  4984.     AX = 000Ah
  4985.     BX = hardware/software text cursor
  4986.         0000h software
  4987.         CX = screen mask
  4988.         DX = cursor mask
  4989.         0001h hardware
  4990.         CX = start scan line
  4991.         DX = end scan line
  4992. Note:    when the software cursor is selected, the char/attribute data at the
  4993.       current screen position is ANDed with the screen mask and then XORed
  4994.       with the cursor mask
  4995. SeeAlso: AX=0009h,INT 62/AX=007Eh
  4996. ----------33000B-----------------------------
  4997. INT 33 - MS MOUSE - READ MOTION COUNTERS
  4998.     AX = 000Bh
  4999. Return: CX = number of mickeys mouse moved horizontally since last call
  5000.     DX = number of mickeys mouse moved vertically
  5001. Notes:    a mickey is the smallest increment the mouse can sense
  5002.     positive values indicate down/right
  5003. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  5004. ----------33000C-----------------------------
  5005. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  5006.     AX = 000Ch
  5007.     CX = call mask
  5008.          bit 0 call if mouse moves
  5009.          bit 1 call if left button pressed
  5010.          bit 2 call if left button released
  5011.          bit 3 call if right button pressed
  5012.          bit 4 call if right button released
  5013.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  5014.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  5015.     ES:DX -> FAR routine
  5016. Notes:    when the subroutine is called, it is passed the following values:
  5017.       AX = condition mask (same bit assignments as call mask)
  5018.       BX = button state
  5019.       CX = cursor column
  5020.       DX = cursor row
  5021.       SI = horizontal mickey count
  5022.       DI = vertical mickey count
  5023.     some versions of the Microsoft documentation incorrectly state that CX
  5024.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  5025.       and DI
  5026. SeeAlso: AX=0018h
  5027. ----------33000D-----------------------------
  5028. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  5029.     AX = 000Dh
  5030. SeeAlso: AX=000Eh,INT 10/AH=04h
  5031. ----------33000E-----------------------------
  5032. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  5033.     AX = 000Eh
  5034. SeeAlso: AX=000Dh
  5035. ----------33000F-----------------------------
  5036. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  5037.     AX = 000Fh
  5038.     CX = number of mickeys per 8 pixels horizontally (default 8)
  5039.     DX = number of mickeys per 8 pixels vertically (default 16)
  5040. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  5041. ----------330010-----------------------------
  5042. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  5043.     AX = 0010h
  5044.     CX,DX = X,Y coordinates of upper left corner
  5045.     SI,DI = X,Y coordinates of lower right corner
  5046. Note:    mouse cursor is hidden in the specified region, and needs to be
  5047.       explicitly turned on again
  5048. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  5049. ----------330010-----------------------------
  5050. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  5051.     AX = 0010h
  5052.     ES:DX -> update region list (see below)
  5053. Notes:    mouse cursor is hidden in the specified region, and needs to be
  5054.       explicitly turned on again
  5055.     this version of the call is described in an August 1988 version of the
  5056.       Genius Mouse programmer's reference; it has been changed to conform
  5057.       to the Microsoft version shown above by version 9.06 (and possibly
  5058.       earlier versions)
  5059. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  5060.  
  5061. Format of update region list:
  5062. Offset    Size    Description
  5063.  00h    WORD    left-most column
  5064.  02h    WORD    top-most row
  5065.  04h    WORD    right-most column
  5066.  06h    WORD    bottom-most row
  5067. ----------330011-----------------------------
  5068. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  5069.     AX = 0011h
  5070. Return: AX = FFFFh
  5071.     BX = number of buttons
  5072. SeeAlso: AX=0000h
  5073. ----------330012-----------------------------
  5074. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  5075.     AX = 0012h
  5076.     BH = cursor width in words
  5077.     CH = rows in cursor
  5078.     BL = horizontal hot spot (-16 to 16)
  5079.     CL = vertical hot spot (-16 to 16)
  5080.     ES:DX -> bit map of screen and cursor maps
  5081. Return: AX = FFFFh if successful
  5082. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  5083. ----------330013-----------------------------
  5084. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  5085.     AX = 0013h
  5086.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  5087. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  5088. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  5089. ----------330014-----------------------------
  5090. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  5091.     AX = 0014h
  5092.     CX = call mask (see AX=000Ch)
  5093.     ES:DX -> FAR routine 
  5094. Return: CX = call mask of previous interrupt routine
  5095.     ES:DX = FAR address of previous interrupt routine
  5096. SeeAlso: AX=000Ch,AX=0018h
  5097. ----------330015-----------------------------
  5098. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  5099.     AX = 0015h
  5100. Return: BX = size of buffer needed to store driver state
  5101. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  5102. ----------330016-----------------------------
  5103. INT 33 - MS MOUSE - SAVE DRIVER STATE
  5104.     AX = 0016h
  5105.     BX = size of buffer (see AX=0015h)
  5106.     ES:DX -> buffer for driver state
  5107. Note:    although not documented, many drivers appear to require BX on input
  5108. SeeAlso: AX=0015h,AX=0017h
  5109. ----------330017-----------------------------
  5110. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  5111.     AX = 0017h
  5112.     BX = size of buffer (see AX=0015h)
  5113.     ES:DX -> buffer containing saved state
  5114. Notes:    although not documented, many drivers appear to require BX on input
  5115.     some mouse drivers range-check the values in the saved state based on
  5116.       the current video mode; thus, the video mode should be restored
  5117.       before the mouse driver's state is restored
  5118. SeeAlso: AX=0015h,AX=0016h
  5119. ----------330018-----------------------------
  5120. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  5121.     AX = 0018h
  5122.     CX = call mask
  5123.          bit 0 call if mouse moves
  5124.          bit 1 call if left button pressed
  5125.          bit 2 call if left button released
  5126.          bit 3 call if right button pressed
  5127.          bit 4 call if right button released
  5128.          bit 5 call if shift button pressed during event
  5129.          bit 6 call if ctrl key pressed during event
  5130.          bit 7 call if alt key pressed during event
  5131.     ES:DX -> FAR routine
  5132. Return: AX = 0018h if successful
  5133.        = FFFFh on error
  5134. Notes:    when the subroutine is called, it is passed the following values:
  5135.       AX = condition mask (same bit assignments as call mask)
  5136.       BX = button state
  5137.       CX = cursor column
  5138.       DX = cursor row
  5139.       SI = horizontal mickey count
  5140.       DI = vertical mickey count
  5141.     up to three handlers can be defined by separate calls to this function
  5142. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  5143. ----------330019-----------------------------
  5144. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  5145.     AX = 0019h
  5146.     CX = call mask (see AX=0018h)
  5147. Return: BX:DX = user interrupt vector
  5148.     CX = call mask (0000h if not found)
  5149. Note:    attempts to find a user event handler (defined by function 18h)
  5150.       whose call mask matches CX
  5151. SeeAlso: AX=0018h
  5152. ----------33001A-----------------------------
  5153. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  5154.     AX = 001Ah
  5155.     BX = horizontal speed \
  5156.     CX = vertical speed   / (see AX=000Fh)
  5157.     DX = double speed threshold (see AX=0013h)
  5158. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  5159. ----------33001B-----------------------------
  5160. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  5161.     AX = 001Bh
  5162. Return: BX = horizontal speed
  5163.     CX = vertical speed
  5164.     DX = double speed threshold
  5165. SeeAlso: AX=000Bh,AX=001Ah
  5166. ----------33001C-----------------------------
  5167. INT 33 - MS MOUSE - SET INTERRUPT RATE
  5168.     AX = 001Ch
  5169.     BX = rate
  5170.         00h no interrupts allowed
  5171.         01h 30 per second
  5172.         02h 50 per second
  5173.         03h 100 per second
  5174.         04h 200 per second
  5175. Notes:    only available on InPort mouse
  5176.     values greater than 4 may cause unpredictable driver behavior
  5177. ----------33001D-----------------------------
  5178. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  5179.     AX = 001Dh
  5180.     BX = display page number
  5181. Note:    the cursor will be displayed on the specified page
  5182. SeeAlso: AX=001Eh
  5183. ----------33001E-----------------------------
  5184. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  5185.     AX = 001Eh
  5186. Return: BX = display page number
  5187. SeeAlso: AX=001Dh
  5188. ----------33001F-----------------------------
  5189. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  5190.     AX = 001Fh
  5191. Return: AX = 001Fh unsuccessful
  5192.          FFFFh successful
  5193.     ES:BX = vector for INT 33h before mouse driver was first installed
  5194. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  5195.     if you restore Int 33h to ES:BX, driver will be completely disabled
  5196. SeeAlso: AX=0020h
  5197. ----------330020-----------------------------
  5198. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  5199.     AX = 0020h
  5200. Return: AX = 0020h unsuccessful (or driver not installed)
  5201.          FFFFh successful
  5202. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  5203.       which were removed by function 1Fh
  5204. SeeAlso: AX=001Fh
  5205. ----------330021-----------------------------
  5206. INT 33 - MS MOUSE - SOFTWARE RESET
  5207.     AX = 0021h
  5208. Return: AX = FFFFh if mouse driver installed
  5209.         BX = number of buttons (FFFFh = two buttons)
  5210.          0021h if mouse driver not installed
  5211. Note:    identical to funtion 00h, but does not reset the mouse
  5212. SeeAlso: AX=0000h
  5213. ----------330022-----------------------------
  5214. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  5215.     AX = 0022h
  5216.     BX = language
  5217.         00h English
  5218.         01h French
  5219.         02h Dutch
  5220.         03h German
  5221.         04h Swedish
  5222.         05h Finnish
  5223.         06h Spanish
  5224.         07h Portugese
  5225.         08h Italian
  5226. Note:    only available on international versions of the driver, US versions
  5227.       ignore this call
  5228. SeeAlso: AX=0023h
  5229. ----------330023-----------------------------
  5230. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  5231.     AX = 0023h
  5232. Return:    BX = language (see AX=0022h)
  5233. Note:    the US version of the driver always returns zero 
  5234. SeeAlso: AX=0022h
  5235. ----------330024-----------------------------
  5236. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  5237.     AX = 0024h
  5238. Return: AX = FFFFh on error
  5239.     otherwise,
  5240.         BH = major version
  5241.         BL = minor version
  5242.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  5243.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  5244. SeeAlso: AX=004Dh,AX=006Dh
  5245. ----------330025-----------------------------
  5246. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  5247.     AX = 0025h
  5248. Return: AX = general information
  5249.         bit 15: driver loaded as device driver rather than TSR
  5250.         bit 14: driver is newer integrated type
  5251.         bits 13,12: current cursor type
  5252.             00 software text cursor
  5253.             01 hardware text cursor
  5254.             1X graphics cursor
  5255.         bits 11-8: interrupt rate (see AX=001Ch)
  5256.         bits 7-0:  count of currently-active Mouse Display Drivers (MDD),
  5257.             the newer integrated driver type
  5258.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  5259.     CX = mouse code active flag (for OS/2)
  5260.     DX = mouse driver busy flag (for OS/2)
  5261. ----------330026-----------------------------
  5262. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  5263.     AX = 0026h
  5264. Return: BX = mouse-disabled flag
  5265.     CX = maximum virtual X (for current video mode)
  5266.     DX = maximum virtual Y
  5267. SeeAlso: AX=0031h
  5268. ----------330026-----------------------------
  5269. INT 33 - Genius Mouse 9.06 - ???
  5270.     AX = 0026h
  5271. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  5272. ----------330027-----------------------------
  5273. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  5274.     AX = 0027h
  5275. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  5276.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  5277.     CX = horizontal mickeys moved since last call
  5278.     DX = vertical mickeys moved since last call
  5279. SeeAlso: AX=000Bh
  5280. ----------330028-----------------------------
  5281. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  5282.     AX = 0028h
  5283.     CX = new video mode (call is NOP if 0000h)
  5284.     DH = Y font size (00h = default)
  5285.     DL = X font size (00h = default)
  5286. Return: CL = status (00h = successful)
  5287. Note:    DX is ignored unless the selected video mode supports font size control
  5288. SeeAlso: AX=0029h,INT 10/AH=00h
  5289. ----------330029-----------------------------
  5290. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  5291.     AX = 0029h
  5292.     CX = previous video mode
  5293.         0000h get first supported video mode
  5294.         other get next supported mode after mode CX
  5295. Return: CX = first/next video mode (0000h = no more video modes)
  5296.     BS:DX -> description of video mode or 0000h:0000h if none
  5297. Notes:    the enumerated video modes may be in any order and may repeat
  5298.     the description string (if available) is terminated by '$' followed by
  5299.       a NUL byte
  5300. SeeAlso: AX=0028h
  5301. ----------33002A-----------------------------
  5302. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  5303.     AX = 002Ah
  5304. Return: AX = internal counter controlling cursor visibility
  5305.     BX = cursor hot spot column
  5306.     CX = cursor hot spot row
  5307.     DX = mouse type (00h none, 01h bus, 02h serial, 03h InPort, 04h IBM,
  5308.              05h Hewlett-Packard)
  5309. Note:    the hot spot location is relative to the upper left corner of the
  5310.       cursor block and may range from -128 to +127 both horizontally and
  5311.       vertically
  5312. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  5313. ----------33002B-----------------------------
  5314. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  5315.     AX = 002Bh
  5316.     BX = active acceleration profile
  5317.         0001h-0004h or FFFFh to restore default curves
  5318.     ES:SI -> buffer containing acceleration profile data (see below)
  5319. Return: AX = success flag
  5320. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  5321.  
  5322. Format of acceleration profile data:
  5323. Offset    Size    Description
  5324.  00h    BYTE    length of acceleration profile 1
  5325.  01h    BYTE    length of acceleration profile 2
  5326.  02h    BYTE    length of acceleration profile 3
  5327.  03h    BYTE    length of acceleration profile 4
  5328.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  5329.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  5330.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  5331.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  5332.  84h 32 BYTEs    speedup factor for acceleration profile 1
  5333.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5334.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  5335.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5336.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  5337.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5338.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  5339.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5340. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  5341. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  5342. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  5343. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  5344. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  5345.       unused bytes in the speedup factor fields are filled with 10h
  5346. ----------33002C-----------------------------
  5347. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  5348.     AX = 002Ch
  5349. Return: AX = status (0000h success)
  5350.     BX = currently-active acceleration profile
  5351.     ES:SI -> acceleration profile data (see AX=002Bh)
  5352. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  5353. ----------33002D-----------------------------
  5354. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  5355.     AX = 002Dh
  5356.     BX = acceleration level
  5357.         0001h-0004h to set profile, or FFFFh to get current profile
  5358. Return: AX = status
  5359.         0000h successful
  5360.         ES:SI -> 16-byte blank-padded name of acceleration profile
  5361.         FFFEh invalid acceleration curve number
  5362.         ES:SI destroyed
  5363.     BX = active acceleration curve number
  5364. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  5365. ----------33002E-----------------------------
  5366. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  5367.     AX = 002Eh
  5368.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  5369.     ES:SI -> 64-byte buffer for profile names (16 bytes per name)
  5370. Return: AX = status (0000h success)
  5371.     ES:SI buffer filled with default names if BL nonzero on entry
  5372. Note:    not supported by Logitech driver v6.10
  5373. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  5374. ----------33002F-----------------------------
  5375. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  5376.     AX = 002Fh
  5377. Return: AX = status
  5378. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  5379. SeeAlso: INT 2F/AH=53h
  5380. ----------330030-----------------------------
  5381. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  5382.     AX = 0030h
  5383.     CX = command
  5384.         0000h get status of BallPoint device
  5385.         other set rotation angle and masks
  5386.         BX = rotation angle (-32768 to 32767 degrees)
  5387.         CH = primary button mask
  5388.         CL = secondary button mask
  5389. Return: AX = button status (FFFFh if no BallPoint)
  5390.         bit 5: button 1
  5391.         bit 4: button 2
  5392.         bit 3: button 3
  5393.         bit 2: button 4
  5394.         other: zero
  5395.     BX = rotation angle (0-360 degrees)
  5396.     CH = primary button mask
  5397.     CL = secondary button mask
  5398. ----------330031-----------------------------
  5399. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  5400.     AX = 0031h
  5401. Return: AX = virtual X minimum
  5402.     BX = virtual Y minimum
  5403.     CX = virtual X maximum
  5404.     DX = virtual Y maximum
  5405. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  5406.       the default is minimum = 0 and maximum = absolute maximum
  5407.       (see AX=0026h)
  5408. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  5409. ----------330032-----------------------------
  5410. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  5411.     AX = 0032h
  5412. Return: AX = active function flags (FFFFh for v8.10)
  5413.         bit 15: function 0025h supported
  5414.         bit 14: function 0026h supported
  5415.         ...
  5416.         bit 0: function 0034h supported
  5417.     BX = ??? (0000h) officially unused
  5418.     CX = ??? (E000h) officially unused
  5419.     DX = ??? (0000h) officially unused
  5420. ----------330033-----------------------------
  5421. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  5422.     AX = 0033h
  5423.     CX = size of buffer
  5424.         0000h get required buffer size
  5425.         Return: AX = 0000h
  5426.             CX = required size (0154h for Logitech v6.10, 0159h
  5427.                 for MS v8.10-8.20)
  5428.         other
  5429.         ES:DX -> buffer of CX bytes
  5430.         Return: AX = 0000h
  5431.             CX = number of bytes returned
  5432.             ES:DX buffer filled (see below)
  5433. SeeAlso: AX=002Bh
  5434.  
  5435. Format of data buffer:
  5436. Offset    Size    Description
  5437.  00h    BYTE    mouse type
  5438.  01h    BYTE    current language
  5439.  02h    BYTE    horizontal sensitivity (00h-64h)
  5440.  03h    BYTE    vertical sensitivity (00h-64h)
  5441.  04h    BYTE    double-speed threshold (00h-64h)
  5442.  05h    BYTE    ballistic curve (01h-04h)
  5443.  06h    BYTE    interrupt rate (01h-04h)
  5444.  07h    BYTE    cursor override mask
  5445.  08h    BYTE    laptop adjustment
  5446.  09h    BYTE    memory type (00h-02h)
  5447.  0Ah    BYTE    SuperVGA support (00h,01h)
  5448.  0Bh    BYTE    rotation angle
  5449.  0Ch    BYTE    ???
  5450.  0Dh    BYTE    primary button (01h-04h)
  5451.  0Eh    BYTE    secondary button (01h-04h)
  5452.  0Fh    BYTE    click lock enabled (00h,01h)
  5453.  10h 324 BYTEs    acceleration profile data (see AX=002Bh)
  5454. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  5455. ----------330034-----------------------------
  5456. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  5457.     AX = 0034h
  5458. Return: AX = status (0000h successful)
  5459.     ES:DX -> ASCIZ initialization (.INI) file name
  5460. ----------330035-----------------------------
  5461. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  5462.     AX = 0035h
  5463.     BX = function
  5464.         FFFFh get current settings
  5465.         Return: AX = 0000h
  5466.             BH = style (see below)
  5467.             BL = size (see below)
  5468.             CH = threshold
  5469.             CL = active flag (00h disabled, 01h enabled)
  5470.             DX = delay
  5471.         other
  5472.         BH = style (00h normal, 01h reverse, 02h transparent)
  5473.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  5474.         CH = threshold (00h-64h)
  5475.         CL = active flag (00h disable size change, 01h enable)
  5476.         DX = delay (0000h-0064h)
  5477.         Return: AX = 0000h
  5478. Note:    not supported by Logitech driver v6.10
  5479. SeeAlso: AX=0012h,AX=002Ah
  5480. ----------330042-----------------------------
  5481. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  5482.     AX = 0042h
  5483. Return: AX = FFFFh successful
  5484.         BX = buffer size in bytes for functions 50h and 52h
  5485.        = 0000h MSMOUSE not installed
  5486.        = 0042h functions 42h, 50h, and 52h not supported
  5487. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5488. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  5489. ----------330043-----------------------------
  5490. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CONFIGURE MOUSE???
  5491.     AX = 0043h
  5492.     CX:BX -> ??? buffer (see below)
  5493.     DL = ???
  5494. Return: ???
  5495. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  5496.     this function is also supported by the Genius Mouse 9.06 driver
  5497.  
  5498. Format of buffer:
  5499. Offset    Size    Description
  5500.  00h    WORD    I/O port address
  5501.  02h    BYTE    ???
  5502.  03h    BYTE    interrupt number
  5503.  04h    BYTE    interrupt mask for interrupt controller
  5504.  05h  5 BYTEs    ???
  5505. ----------330044CXCDEF-----------------------
  5506. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  5507.     AX = 0044h
  5508.     CX = CDEFh
  5509. Return: AX = new state of ???
  5510. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5511. SeeAlso: AX=0045h
  5512. ----------330045CXCDEF-----------------------
  5513. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  5514.     AX = 0045h
  5515.     CX = CDEFh
  5516. Return: AX = new state of ???
  5517. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5518. SeeAlso: AX=0044h
  5519. ----------330047-----------------------------
  5520. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET BUTTON ASSIGNMENTS
  5521.     AX = 0047h
  5522.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  5523. Return: ???
  5524. Note:    also supported by Genius Mouse 9.06 driver
  5525. SeeAlso: AX=0067h
  5526. ----------330048BXCDEF-----------------------
  5527. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET ???
  5528.     AX = 0048h
  5529.     BX = CDEFh
  5530. Return: CX = ???
  5531.     BH = ???
  5532.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  5533. Note:    also supported by Genius Mouse 9.06 driver
  5534. ----------33004B-----------------------------
  5535. INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK
  5536.     AX = 004Bh
  5537. Return: ES:DI -> signature/description string if installed
  5538. Note:    the signature string in v7.04d is
  5539.       "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  5540. ----------33004CBXCDEF-----------------------
  5541. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ??? FLAG
  5542.     AX = 004Ch
  5543.     BX = CDEFh
  5544. Note:    also supported by Genius Mouse 9.06
  5545. SeeAlso: AX=006Ch
  5546. ----------33004D-----------------------------
  5547. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  5548.     AX = 004Dh
  5549. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft"
  5550. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  5551.       mouse drivers
  5552.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  5553.       follows the above copyright message (KYE Corp. manufactures the
  5554.       driver)
  5555. SeeAlso: AX=0024h,AX=006Dh
  5556. ----------33004F-----------------------------
  5557. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ENABLE MOUSE
  5558.     AX = 004Fh
  5559. Return: nothing
  5560. Note:    also supported by Genius Mouse 9.06
  5561. SeeAlso: AX=0043h,AX=0053h
  5562. ----------330050-----------------------------
  5563. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  5564.     AX = 0050h
  5565.     BX = buffer size (ignored by some driver versions)
  5566.     ES:DX -> buffer
  5567. Return: AX = FFFFh if successful
  5568. Notes:    the buffer must be large enough to hold the entire state, or following
  5569.       data will be overwritten by state data in versions which ignore BX;
  5570.       use INT 33/AX=0042h to get the required size
  5571.     this function is also supported by the Genius Mouse 9.06 driver
  5572. SeeAlso: AX=0042h,AX=0052h
  5573. ----------330052-----------------------------
  5574. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  5575.     AX = 0052h
  5576.     BX = buffer size (ignored by some driver versions)
  5577.     ES:DX -> buffer
  5578. Return: AX = FFFFh if successful
  5579. Note:    also supported by Genius Mouse 9.06 driver
  5580. SeeAlso: AX=0050h
  5581. ----------330053-----------------------------
  5582. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - DISABLE MOUSE
  5583.     AX = 0053h
  5584. Return: nothing
  5585. Note:    also supported by Genius Mouse 9.06
  5586. SeeAlso: AX=0043h,AX=004Fh
  5587. ----------330054CXCDEF-----------------------
  5588. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SELECT ULTRARES ACCELERATION LEVEL
  5589.     AX = 0054h
  5590.     CX = CDEFh
  5591.     BX = ??? (NOP if <= 0000h)
  5592. Return: ???
  5593. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5594. SeeAlso: AX=005Ah
  5595. ----------330055-----------------------------
  5596. INT 33 - Kraft Mouse - GET ???
  5597.     AX = 0055h
  5598. Return: CX = ???
  5599.     DX = ???
  5600.     ES = ???
  5601. ----------330058-----------------------------
  5602. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  5603.     AX = 0058h
  5604. Return: AX = CS of driver
  5605.     CX:BX = original INT 33 vector
  5606.     DX = ???
  5607. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5608. ----------33005A-----------------------------
  5609. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ULTRARES ACCELERATIONS
  5610.     AX = 005Ah
  5611.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  5612.     DX:SI -> buffer containing thresholds??? (CX words)
  5613.     DX:BX -> buffer containing acceleration values???
  5614.         (9*14h words, only first CX of each 14h used)
  5615.     ???
  5616. Return: CF clear
  5617.     ???
  5618. Note:    this function is also supported by Genius Mouse 9.06
  5619. SeeAlso: AX=0054h
  5620. ----------330061BXCDEF-----------------------
  5621. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  5622.     AX = 0061h
  5623.     BX = CDEFh
  5624. Return: CX = ???
  5625. Note:    also supported by Genius Mouse 9.06
  5626. ----------330067-----------------------------
  5627. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET MOUSE BUTTONS???
  5628.     AX = 0067h         
  5629. Return: BL = number of buttons???
  5630. Note:    also supported by Genius Mouse 9.06
  5631. SeeAlso: AX=0047h
  5632. ----------33006CBXCDEF-----------------------
  5633. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CLEAR ??? FLAG
  5634.     AX = 006Ch
  5635.     BX = CDEFh
  5636. Note:    also supported by Genius Mouse 9.06
  5637. SeeAlso: AX=004Ch   
  5638. ----------33006D-----------------------------
  5639. INT 33 - MS MOUSE - GET VERSION STRING
  5640.     AX = 006Dh
  5641. Return: ES:DI -> Microsoft version number of resident driver (see below)
  5642. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  5643.       drivers
  5644.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  5645.       Microsoft version as 7.00 even though they do not support any of the
  5646.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  5647.       (the Genius Mouse driver supports function 0026h, but it differs
  5648.       from the Microsoft function)
  5649. SeeAlso: AX=0024h,AX=004Dh,AX=266Ch
  5650.  
  5651. Format of Microsoft version number:
  5652. Offset    Size    Description
  5653.  00h    BYTE    major version
  5654.  01h    BYTE    minor version (BCD)
  5655. ----------330070BXABCD-----------------------
  5656. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  5657.     AX = 0070h
  5658.     BX = ABCDh
  5659. Return: AX = ABCDh if installed
  5660.         BX:CX -> data structure (see below)
  5661. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  5662.     the v7.01 POPUP.COM and menu drivers also check for the signature
  5663.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  5664.     if POPUP is not loaded, the returned data structure contains the proper
  5665.       signature at offset 00h, but not at offset 08h
  5666.  
  5667. Format of data structure:
  5668. Offset    Size    Description
  5669.  00h    WORD    signature ABCDh
  5670.  02h    DWORD    pointer to info structure???
  5671.  06h  2 BYTEs    ???
  5672.  08h    WORD    signature ABCDh
  5673.  
  5674. Format of info structure:
  5675. Offset    Size    Description
  5676.  00h    WORD    driver version
  5677.  02h  8 BYTEs    ???
  5678.  0Ah    WORD    segment of ???
  5679.     ???
  5680. ----------330072BXABCD-----------------------
  5681. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  5682.     AX = 0072h
  5683.     BX = ABCDh
  5684. Return: ???
  5685. Note:    this function is also supported by the Genius Mouse 9.06 driver
  5686. ----------330073BXCDEF-----------------------
  5687. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET BUTTON ASSIGNMENTS
  5688.     AX = 0073h
  5689.     BX = CDEFh
  5690.     ES:DX -> 3-byte buffer for button assignments
  5691. Return: CX = number of buttons???
  5692.     ES:DX buffer filled (default is "LMR")
  5693. Note:    also supported by Genius Mouse 9.06
  5694. SeeAlso: AX=0067h
  5695. ----------33012E-----------------------------
  5696. INT 33 - MS MOUSE v8.10+ - ???
  5697.     AX = 012Eh
  5698.     BL = ???
  5699. Return: AX = 0000h
  5700. Note:    not supported by Logitech driver v6.10
  5701. SeeAlso: AX=002Eh,AX=022Eh
  5702. ----------33022E-----------------------------
  5703. INT 33 - MS MOUSE v8.10+ - ???
  5704.     AX = 022Eh
  5705.     BL = ???
  5706. Return: AX = 0000h
  5707. Note:    not supported by Logitech driver v6.10
  5708. SeeAlso: AX=002Eh,AX=012Eh
  5709. ----------33136C-----------------------------
  5710. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5711.     AX = 136Ch
  5712.     BX = ???
  5713. Return: AX = ???
  5714.     BX = ???
  5715. ----------33146C-----------------------------
  5716. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  5717.     AX = 146Ch
  5718.     BL = function
  5719.         00h set ???
  5720.         BH = new value (zero/nonzero to clear/set)
  5721.         else get ???
  5722.         Return: ???
  5723. ----------33156C-----------------------------
  5724. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  5725.     AX = 156Ch
  5726. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  5727.     ES:SI -> version string, terminated with CRLF
  5728. ----------33166C-----------------------------
  5729. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5730.     AX = 166Ch
  5731.     BL = ???
  5732.         00h ???
  5733.         01h ???
  5734.         other ???
  5735.         BH = new value of ???
  5736.         Return: AX = FFFFh
  5737. ----------33176C-----------------------------
  5738. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5739.     AX = 176Ch
  5740.     ???
  5741. Return: ???
  5742. ----------33186C-----------------------------
  5743. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5744.     AX = 186Ch
  5745.     ???
  5746. Return: ???
  5747. ----------33196C-----------------------------
  5748. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5749.     AX = 196Ch
  5750.     ???
  5751. Return: ???
  5752. ----------331A6C-----------------------------
  5753. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  5754.     AX = 1A6Ch
  5755. Return: AX = FFFFh
  5756.     BX = ???
  5757.     CX = ???
  5758. SeeAlso: AX=1B6Ch
  5759. ----------331B6C-----------------------------
  5760. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  5761.     AX = 1B6Ch
  5762.     BX = new value for ??? (0000h-0003h)
  5763. Return: AX = FFFFh
  5764. SeeAlso: AX=1A6Ch
  5765. ----------331C6C-----------------------------
  5766. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5767.     AX = 1C6Ch
  5768.     BX = ???
  5769.         <42h ???
  5770.         =42h ???
  5771.         >42h ???
  5772.             ES:DI -> ???
  5773.             Return: AX = ???
  5774. ----------331D6C-----------------------------
  5775. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  5776.     AX = 1D6Ch
  5777. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  5778. SeeAlso: AX=1E6Ch
  5779. ----------331E6C-----------------------------
  5780. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  5781.     AX = 1E6Ch
  5782.     BX = direction (0=north, 1=south, 2=east, 3=west)
  5783. SeeAlso: AX=1D6Ch
  5784. ----------331F6C-----------------------------
  5785. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  5786.     AX = 1F6Ch
  5787. Return: BX = 0=off, 1=on
  5788.     CX = 1=low, 2=high
  5789. SeeAlso: AX=002Ch,AX=236Ch
  5790. ----------33206C-----------------------------
  5791. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  5792.     AX = 206Ch
  5793.     BX = parameter (00h = right, FFh = left)
  5794. SeeAlso: AX=216Ch
  5795. ----------33216C-----------------------------
  5796. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  5797.     AX = 216Ch
  5798. Return: BX = parameter (00h = right, FFh = left)
  5799. SeeAlso: AX=206Ch
  5800. ----------33226C-----------------------------
  5801. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  5802.     AX = 226Ch
  5803. Note:    this only frees memory; does not restore hooked interrupts
  5804. ----------33236C-----------------------------
  5805. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  5806.     AX = 236Ch
  5807.     BX = 0=off, 1=on
  5808.     CX = 1=low, 2=high
  5809. SeeAlso: AX=002Ch,AX=1F6Ch
  5810. ----------33246C-----------------------------
  5811. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  5812.     AX = 246Ch
  5813.     ES:DX -> parameter table buffer (see below)
  5814. Return: AX = FFFFh if driver installed for serial mouse
  5815. SeeAlso: AX=0000h,AX=256Ch
  5816.  
  5817. Format of parameter table:
  5818. Offset    Size    Description
  5819.  00h    WORD    baud rate divided by 100  (serial mouse only)
  5820.  02h    WORD    emulation          (serial mouse only)
  5821.  04h    WORD    report rate          (serial mouse only)
  5822.  06h    WORD    firmware revision      (serial mouse only)
  5823.  08h    WORD    0              (serial mouse only)
  5824.  0Ah    WORD    port              (serial mouse only)
  5825.  0Ch    WORD    physical buttons
  5826.  0Eh    WORD    logical buttons
  5827. ----------33256CBX00h -----------------------
  5828. INT 33 - LOGITECH MOUSE - SET PARAMETERS
  5829.     AX = 256Ch
  5830.     BX = 00h set baud rate (serial mouse only)
  5831.         CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  5832.        = 01h set emulation (serial mouse only)
  5833.         CX = emulation
  5834.             0 = 5 byte packed binary
  5835.             1 = 3 byte packed binary
  5836.             2 = hexadecimal
  5837.             3 = relative bit pad
  5838.             4 = not supported
  5839.             5 = MM Series
  5840.             6 = not supported
  5841.             7 = Microsoft
  5842.        = 02h set report rate (serial mouse only)
  5843.         CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  5844.        = 03h set port (serial mouse only)
  5845.         CX = port (1, 2)
  5846.        = 04h set mouse logical buttons
  5847.         CX = buttons (2, 3)
  5848. Return: AX = FFFFh if driver installed for serial mouse
  5849. SeeAlso: AX=246Ch,AX=276Ch
  5850. ----------33266C-----------------------------
  5851. INT 33 - LOGITECH MOUSE - GET VERSION???
  5852.     AX = 266Ch
  5853. Return: BX = 'SS'
  5854.     CH = '4'  major version number
  5855.     CL = '1'  minor version number
  5856. SeeAlso: AX=006Dh
  5857. ----------33276C-----------------------------
  5858. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  5859.     AX = 276Ch
  5860. SeeAlso: AX=256Ch
  5861. ----------333000-----------------------------
  5862. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  5863.     AX = 3000h
  5864. Return: AX = FFFFh if installed
  5865.         BX = version number (BH = major, BL = minor)
  5866. Program: SMD is a programmer's library by Andy Hakim which provides a
  5867.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  5868.       SMD-based TSR which replaces the block mouse cursor in text
  5869.       applications.
  5870. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  5871. ----------333001-----------------------------
  5872. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  5873.     AX = 3001h
  5874. Return: AX = status (0000h = disabled, 0001h = enabled)
  5875. Note:    SMD remains disabled if running under Desqview or in graphics mode
  5876. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  5877. ----------333002-----------------------------
  5878. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  5879.     AX = 3002h
  5880. Return: AX = status (0000h = disabled, 0001h = enabled)
  5881. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  5882. ----------333003-----------------------------
  5883. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  5884.     AX = 3003h
  5885.     BL = data structure selector
  5886.         00h Primary Bitmap (used for 25 line mode)
  5887.         01h Secondary Bitmap (used for 43/50 line modes)
  5888.         02h Sacrifice Character Map
  5889.         03h Program Information
  5890. Return: ES:DI -> selected data structure
  5891. SeeAlso: AX=3000h
  5892.  
  5893. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]
  5894. Offset    Size    Description
  5895.  00h    BYTE    vertical size of bitmap (00h - 10h)
  5896.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  5897.  02h    BYTE    vertical hotspot position (00h - 10h)
  5898.  03h    BYTE    horizontal hotspot position (00h - 10h)
  5899.  04h 16 WORDs    cursor bitmap data
  5900.  14h 16 WORDs    screen bitmap data
  5901.  
  5902. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]
  5903. Offset    Size    Description
  5904.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  5905.  01h    BYTE    actual character for the corresponding position on the screen
  5906.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  5907.  03h    BYTE         | 0h | 1h | 2h |      cursor
  5908.  04h    BYTE         |----+----+----|
  5909.  05h    BYTE         | 3h | 4h | 5h |
  5910.  06h    BYTE         |----+----+----|
  5911.  07h    BYTE         | 6h | 7h | 8h |
  5912.  08h    BYTE         +--------------+
  5913.  
  5914. Format of Program Information [SMD_INFO_STRUCT]
  5915. Offset    Size    Description
  5916.  00h    WORD    segment of old interrupt 33h handler
  5917.  02h    WORD    offset of old interrupt 33h handler
  5918.  04h    WORD    PSP of SMD
  5919.  06h    BYTE    ENABLE/DISABLE manual setting status
  5920.  07h    BYTE    ENABLE/DISABLE internal usage status
  5921. ----------33---------------------------------
  5922. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  5923.     AX = 3004
  5924. SeeAlso: AX=3000h
  5925. ----------33---------------------------------
  5926. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  5927.     AX = 3005
  5928. SeeAlso: AX=3000h
  5929. ----------334F00-----------------------------
  5930. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  5931.     AX = 4F00h
  5932. Return: AX = 004Fh if supported
  5933.     BX = ???
  5934.     ES:DI -> ???
  5935. SeeAlso: AX=4F01h
  5936. ----------334F01-----------------------------
  5937. INT 33 - LOGITECH MOUSE v6.10+ - ???
  5938.     AX = 4F01h
  5939.     ES = ???
  5940. Return: AX = 004Fh if supported
  5941.     ES:DI -> ???
  5942. SeeAlso: AX=4F00h
  5943. ----------34---------------------------------
  5944. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  5945. Desc:    this interrupt is used to emulate floating-point instructions with
  5946.       an opcode of D8h
  5947. Note:    the floating-point emulators in Borland and Microsoft languages and
  5948.       Lahey FORTRAN use this interrupt
  5949. SeeAlso: INT 35,INT 3E
  5950. ----------35---------------------------------
  5951. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  5952. Desc:    this interrupt is used to emulate floating-point instructions with
  5953.       an opcode of D9h
  5954. Note:    the floating-point emulators in Borland and Microsoft languages and
  5955.       Lahey FORTRAN use this interrupt
  5956. SeeAlso: INT 34,INT 36
  5957. ----------36---------------------------------
  5958. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  5959. Desc:    this interrupt is used to emulate floating-point instructions with
  5960.       an opcode of DAh
  5961. Note:    the floating-point emulators in Borland and Microsoft languages and
  5962.       Lahey FORTRAN use this interrupt
  5963. SeeAlso: INT 35,INT 37
  5964. ----------37---------------------------------
  5965. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  5966. Desc:    this interrupt is used to emulate floating-point instructions with
  5967.       an opcode of DBh
  5968. Note:    the floating-point emulators in Borland and Microsoft languages and
  5969.       Lahey FORTRAN use this interrupt
  5970. SeeAlso: INT 36,INT 38
  5971. ----------38---------------------------------
  5972. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  5973. Desc:    this interrupt is used to emulate floating-point instructions with
  5974.       an opcode of DCh
  5975. Note:    the floating-point emulators in Borland and Microsoft languages and
  5976.       Lahey FORTRAN use this interrupt
  5977. SeeAlso: INT 37,INT 39
  5978. ----------3802-------------------------------
  5979. INT 38 - PC-MOS/386 v3.0 - GET MOS INTERNAL DATA POINTER
  5980.     AH = 02h
  5981. Return: AX = 0000h
  5982.     ES:BX -> ??? internal data structure
  5983. Program: PC-MOS/386 is a multitasking/multiuser MSDOS-compatible operating
  5984.       system by Software Links, Inc.
  5985. SeeAlso: AH=04h,AH=10h,INT 21/AX=3000h,INT D4
  5986. ----------3804-------------------------------
  5987. INT 38 - PC-MOS/386 v3.0 - GET TASK CONTROL BLOCK
  5988.     AH = 04h
  5989. Return: ES = segment of Task Control Block (TCB) (see below)
  5990. SeeAlso: AH=02h,INT D4
  5991.  
  5992. Format of Task Control Block:
  5993. Offset    Size    Description
  5994.  00h  2 BYTEs    signature "HT"
  5995.  02h 23 BYTEs    ???
  5996.  19h    BYTE    task time slice
  5997.  1Ah  7 BYTEs    ???
  5998.  21h 11 BYTEs    name of currently executing task
  5999.  2Ch 79 BYTEs    ???
  6000.  7Bh  4 BYTEs    user name
  6001.  7Fh    BYTE    current output class
  6002.  80h  7 BYTEs    protection access rights, 2 bits per class (writeable!)
  6003.     ???
  6004. ----------380703-----------------------------
  6005. INT 38 - PC-MOS/386 v3.0 - WAIT FOR KEYPRESS OR TIMEOUT
  6006.     AX = 0703h
  6007.     CX = timeout (in seconds???)
  6008. Return: AH bit 0 set if key pressed, clear otherwise
  6009. SeeAlso: INT 16/AH=00h,INT D4
  6010. ----------3810-------------------------------
  6011. INT 38 - PC-MOS/386 v3.0 - ENTER NATIVE 386 EXECUTION MODE
  6012.     AH = 10h
  6013.     CX = NCA (???) length in bytes (at least 1024???)
  6014.     DX = NCA segment
  6015. Return: in protected mode
  6016.     all segment registers converted to appropriate selectors
  6017. Note:    MSDOS calls are available in protected mode
  6018. SeeAlso: AH=11h,AH=12h,INT 2F/AX=1687h,INT 67/AX=DE0Ch,INT D4
  6019. ----------3811-------------------------------
  6020. INT 38 - PC-MOS/386 v3.0 - ALLOCATE NATIVE MODE MEMORY BLOCK
  6021.     AH = 11h
  6022.     EBX = block length
  6023. Return: ES = selector for allocated block
  6024. SeeAlso: AH=10h,AH=12h,INT D4
  6025. ----------3812-------------------------------
  6026. INT 38 - PC-MOS/386 v3.0 - FREE NATIVE MODE MEMORY BLOCK
  6027.     AH = 12h
  6028.     ES = selector for block to free
  6029. SeeAlso: AH=10h,AH=11h,INT D4
  6030. ----------39---------------------------------
  6031. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  6032. Desc:    this interrupt is used to emulate floating-point instructions with
  6033.       an opcode of DDh
  6034. Note:    the floating-point emulators in Borland and Microsoft languages and
  6035.       Lahey FORTRAN use this interrupt
  6036. SeeAlso: INT 38,INT 3A
  6037. ----------3A---------------------------------
  6038. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  6039. Desc:    this interrupt is used to emulate floating-point instructions with
  6040.       an opcode of DEh
  6041. Note:    the floating-point emulators in Borland and Microsoft languages and
  6042.       Lahey FORTRAN use this interrupt
  6043. SeeAlso: INT 39,INT 3B
  6044. ----------3B---------------------------------
  6045. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  6046. Desc:    this interrupt is used to emulate floating-point instructions with
  6047.       an opcode of DFh
  6048. Note:    the floating-point emulators in Borland and Microsoft languages and
  6049.       Lahey FORTRAN use this interrupt
  6050. SeeAlso: INT 3A,INT 3C
  6051. ----------3C---------------------------------
  6052. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  6053. Notes:    the floating-point emulators in Borland and Microsoft languages and
  6054.       Lahey FORTRAN use this interrupt
  6055.     the generated code is  CD 3C xy mm ....
  6056.       where xy is a modified ESC instruction and mm is the modR/M byte.
  6057.       The xy byte appears to be encoded as
  6058.         s s 0 1 1 x x x      or    s s 0 0 0 x x x
  6059.       where "ss" specifies the segment override:
  6060.         00 -> DS:
  6061.         01 -> SS:
  6062.         10 -> CS:
  6063.         11 -> ES:
  6064. SeeAlso: INT 3B,INT 3D
  6065. ----------3D---------------------------------
  6066. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  6067. Notes:    the floating-point emulators in Borland and Microsoft languages and
  6068.       Lahey FORTRAN use this interrupt
  6069.     this vector is modified but not restored by Direct Access v4.0, and
  6070.       may be left dangling by other programs written with the same version
  6071.       of compiled BASIC
  6072. SeeAlso: INT 3C,INT 3E
  6073. ----------3E---------------------------------
  6074. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  6075. Notes:    the two bytes following the INT 3E instruction are the subcode and
  6076.       a NOP (90h), except for subcodes DCh and DEh, where the second byte
  6077.       is a register count (01h-08h)
  6078.     this vector is modified but not restored by Direct Access v4.0, and
  6079.       may be left dangling by other programs written with the same version
  6080.       of compiled BASIC
  6081. SeeAlso: INT 3D
  6082.  
  6083. Subcode        Function
  6084.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  6085.       top of the stack prior to the INT 3E with the 8087 register contents
  6086.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  6087.       of 8086 stack
  6088.  E0h    round TOS and R1 to single precision, compare, pop twice
  6089.       returns AX=8087 status word, FLAGS=8087 condition bits
  6090.  E2h    round TOS and R1 to double precision, compare, pop twice
  6091.       returns AX=8087 status word, FLAGS=8087 condition bits
  6092.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  6093.       field to the undocumented value 01h; this results in actually
  6094.       rounding to single precision
  6095.  E4h    compare TOS/R1 with two POP's
  6096.       returns FLAGS=8087 condition bits
  6097.  E6h    compare TOS/R1 with POP
  6098.       returns FLAGS=8087 condition bits
  6099.  E8h    FTST (check TOS value)
  6100.       returns FLAGS=8087 condition bits
  6101.  EAh    FXAM (check TOS value)
  6102.       returns AX=8087 status word
  6103.  ECh    sine(ST0)
  6104.  EEh    cosine(ST0)
  6105.  F0h    tangent(ST0)
  6106.  F2h    arctangent(ST0)
  6107.  F4h    ST0 = ln(ST0)
  6108.  F6h    ST0 = log2(ST0)
  6109.  F8h    ST0 = log10(ST0)
  6110.  FAh    ST0 = e**ST0
  6111.  FCh    ST0 = 2**ST0
  6112.  FEh    ST0 = 10**ST0
  6113. ----------3F---------------------------------
  6114. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  6115. Notes:    INT 3F is the default, and may be overridden while linking
  6116.     this vector is modified but not restored by Direct Access v4.0, and
  6117.       may be left dangling by other programs written with the same version
  6118.       of compiled BASIC
  6119. SeeAlso: INT FE"OVERLAY"
  6120. ----------3F---------------------------------
  6121. INT 3F - Microsoft Dynamic Link Library manager
  6122. SeeAlso: INT 21/AH=4Bh
  6123. ----------40---------------------------------
  6124. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  6125. SeeAlso: INT 13,INT 63
  6126. ----------40---------------------------------
  6127. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  6128. SeeAlso: INT 41"Z100",INT FF"Z100"
  6129. ----------40---------------------------------
  6130. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  6131.     AL = operation
  6132.         00h close file
  6133.         40h open file for reading
  6134.         80h open file for writing
  6135.         C0h open file for random access
  6136.     DS:BX -> CR-terminated filename
  6137. Return: AL = file handle (00h if file closed or could not be opened)
  6138. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  6139.       6502-based Master 128 which uses the original CPU as an I/O processor
  6140. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  6141. ----------41---------------------------------
  6142. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  6143. Note:    the default parameter table array is located at F000h:E401h in 100%
  6144.       compatible BIOSes; the pointer may be overridden by the hard disk
  6145.       controller's BIOS to support drive formats unknown to the ROM BIOS
  6146. SeeAlso: INT 13/AH=09h,INT 1E,INT 46
  6147.  
  6148. Format of fixed disk parameters:
  6149. Offset    Size    Description
  6150.  00h    WORD    number of cylinders
  6151.  02h    BYTE    number of heads
  6152.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  6153.  05h    WORD    starting write precompensation cylinder number
  6154.  07h    BYTE    maximum ECC burst length (XT only)
  6155.  08h    BYTE    control byte
  6156.            bits 0-2: drive option (XT only, 0 for others)
  6157.            bit 3:    set if more than 8 heads (AT and later only)
  6158.            bit 4:    always 0
  6159.            bit 5:    set if manufacturer's defect map on max cylinder+1
  6160.                  (AT and later only)
  6161.            bit 6:    disable ECC retries
  6162.            bit 7:    disable access retries
  6163.  09h    BYTE    standard timeout (XT only, 0 for others)
  6164.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  6165.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  6166.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  6167.  0Eh    BYTE    number of sectors per track (AT and later only)
  6168.  0Fh    BYTE    reserved
  6169. ----------41---------------------------------
  6170. INT 41 - Z100 - Master 8259 - Processor Swap
  6171. SeeAlso: INT 40"Z100",INT 42"Z100"
  6172. ----------41---------------------------------
  6173. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  6174.     AL = function
  6175.         01h put bytes sequentially
  6176.         02h put bytes, ignoring sequential pointer
  6177.         03h get bytes sequentially
  6178.         04h get bytes, ignoring sequential pointer
  6179.         05h get media title and boot option
  6180.         06h get current device and directory
  6181.         07h get current library and device
  6182.         08h search directory
  6183.     DS:BX -> control block (see below)
  6184. Return: CF clear if successful
  6185.     CF set on error
  6186.     AL = 00h if operation attempted
  6187.     AL unchanged if unsupported function
  6188. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  6189.  
  6190. Format of control block:
  6191. Offset    Size    Description
  6192.  00h    BYTE    file handle
  6193.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  6194.  05h    DWORD    number of bytes to be transferred
  6195.  09h    DWORD    transfer address
  6196. ----------4112-------------------------------
  6197. INT 41 P - MS Windows debugging kernel - "OutputDebugString"
  6198.     AH = 12h
  6199.     ???
  6200. Return: ???
  6201. SeeAlso: AH=50h
  6202. ----------4150-------------------------------
  6203. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  6204.     AH = 50h
  6205.     ???
  6206. Return: ???
  6207. SeeAlso: AH=12h
  6208. ----------42---------------------------------
  6209. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  6210. SeeAlso: INT 10
  6211. Note:    not used by PS/2 built-in VGA or XGA
  6212. ----------42---------------------------------
  6213. INT 42 - Z100 - Master 8259 - Timer
  6214. SeeAlso: INT 41"Z100",INT 43"Z100"
  6215. ----------42---------------------------------
  6216. INT 42 - Acorn BBS Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  6217.     AL = byte to be written
  6218.     BH = file handle
  6219. Return: flags destroyed
  6220. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  6221. ----------43---------------------------------
  6222. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  6223.    points at graphics data for characters 00h-7Fh of the current font
  6224. SeeAlso: INT 1F,INT 44"VIDEO"
  6225. ----------43---------------------------------
  6226. INT 43 - Z100 - Master 8259 - Slave 8259 input
  6227. Note:    slave runs in special fully nested mode
  6228. SeeAlso: INT 42"Z100",INT 44"Z100"
  6229. ----------43---------------------------------
  6230. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  6231.     BH = file handle
  6232. Return: CF clear if successful
  6233.         AL = byte read from file
  6234.     CF set on error
  6235. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  6236. ----------44---------------------------------
  6237. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  6238.    points at graphics data for current character font
  6239. SeeAlso: INT 1F,INT 43"VIDEO"
  6240. ----------44---------------------------------
  6241. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  6242. ----------44---------------------------------
  6243. INT 44 - IBM 3270-PC High Level Language API
  6244.     DS:SI -> parameter control block
  6245. ----------44---------------------------------
  6246. INT 44 - Z100 - Master 8259 - Serial A
  6247. SeeAlso: INT 43"Z100",INT 45"Z100"
  6248. ----------44---------------------------------
  6249. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  6250.     AH = 00h
  6251.         AL = function
  6252.         00h get current filing system
  6253.             Return: AL = filing system (see below)
  6254.         01h get address of commandline tail
  6255.             Return: BX buffer filled with address of command tail
  6256.                     in I/O processor address space
  6257.                     (use INT 4A/AL=05h to retrieve)
  6258.         FFh flush all files onto secondary storage
  6259.     AH = file handle
  6260.         AL = function
  6261.         00h get sequential pointer for file
  6262.         01h set sequential pointer for file
  6263.         02h get length of file
  6264.     BX -> 4-byte data buffer
  6265. Return: BX buffer updated if appropriate
  6266. Note:    the commandline tail is terminated with a carriage return (0Dh)
  6267. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 45"Acorn",INT 4A"Acorn"
  6268.  
  6269. Values for filing system:
  6270.  00h none
  6271.  01h 1200 bps cassette
  6272.  02h 300 bps cassette
  6273.  03h ROM FS
  6274.  04h DFS
  6275.  05h ANFS/NFS
  6276.  06h TFS
  6277.  08h ADFS
  6278. ----------45---------------------------------
  6279. INT 45 - Z100 - Master 8259 - Serial B
  6280. SeeAlso: INT 44"Z100",INT 46"Z100"
  6281. ----------45---------------------------------
  6282. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  6283.     AL = function
  6284.         00h save block of memory as file
  6285.         01h update directory entry for existing file
  6286.         02h set load address for existing file
  6287.         03h set execution address for existing file
  6288.         04h set attributes for existing file
  6289.         05h read directory
  6290.         06h delete file
  6291.         FFh load file
  6292.     DS:BX -> control block (see below)
  6293. Return: FLAGS destroyed
  6294.     AL = file type
  6295.         00h not found
  6296.         01h file found
  6297.         02h directory found
  6298.         FFh    protected file
  6299. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  6300.  
  6301. Format of control block:
  6302. Offset    Size    Description
  6303.  00h    WORD    address of CR-terminated filename
  6304.  02h    DWORD    load address of file
  6305.  06h    DWORD    execution address of file
  6306.  0Ah    DWORD    start address of data to save
  6307.  0Eh    DWORD    end address of data to save, or file attributes
  6308.         file attributes in low byte:
  6309.             bit 0: no owner read access
  6310.             bit 1: no owner write access
  6311.             bit 2: not executable by owner
  6312.             bit 3: not deletable by owner
  6313.             bit 4: no public read access
  6314.             bit 5: no public write access
  6315.             bit 6: not executable with public access
  6316.             bit 7: not deletable with public access
  6317.         other three bytes are filing-system specific file attributes
  6318. ----------46---------------------------------
  6319. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  6320. SeeAlso: INT 13/AH=09h,INT 41
  6321. ----------46---------------------------------
  6322. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  6323. SeeAlso: INT 45"Z100",INT 47"Z100"
  6324. ----------46---------------------------------
  6325. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  6326. Return: CF clear if successful
  6327.         AL = character read
  6328.     CF set on error
  6329.         AL = error code
  6330. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  6331. ----------47---------------------------------
  6332. INT 47 - Z100 - Master 8259 - Printer
  6333. SeeAlso: INT 46"Z100",INT 48"Z100"
  6334. ----------47---------------------------------
  6335. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  6336.     AL = character to be written
  6337. Return: FLAGS destroyed
  6338. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  6339. ----------478000-----------------------------
  6340. INT 47 - SQL Base - DATABASE ENGINE API
  6341.     AX = 8000h
  6342.     DS:BX -> parameter block, first word is function number
  6343. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  6344.  
  6345. Values for function number:
  6346.  01h    "SQLFINI" initalialize application's use of the database
  6347.  02h    "SQLFDON" application is done using the database
  6348.  03h    "SQLFCON" connect to a cursor/database
  6349.  04h    "SQLFDIS" disconnect from a cursor/database
  6350.  05h    "SQLFCOM" compile a SQL command
  6351.  06h    "SQLFEXE" execute a SQL command
  6352.  07h    "SQLFCEX" compile and execute a SQL command
  6353.  08h    "SQLFCMT" commit a transaction to the database
  6354.  09h    "SQLFDES" describe the items of a SELECT statement
  6355.  0Ah    "SQLFGFI" get fetch information
  6356.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  6357.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  6358.  0Dh    "SQLFEFB" enable fetch backwards
  6359.  0Eh    "SQLFPRS" position in result set
  6360.  0Fh    "SQLFURS" undo result set
  6361.  10h    "SQLFNBV" get number of bind variables
  6362.  11h    "SQLFBND" bind data variables
  6363.  12h    "SQLFBNN" bind numerics
  6364.  13h    "SQLFBLN" bind long number
  6365.  14h    "SQLFBLD" bind long data variables
  6366.  15h    "SQLFSRS" start restriction set processing
  6367.  16h    "SQLFRRS" restart restriction set processing
  6368.  17h    "SQLFCRS" close restriction set
  6369.  18h    "SQLFDRS" drop restriction set
  6370.  19h    "SQLFARF" apply Roll Forward journal
  6371.  1Ah    "SQLFERF" end Roll Forward journal
  6372.  1Bh    "SQLFSRF" start Roll Forward journal
  6373.  1Ch    "SQLFSTO" store a compiled SQL command
  6374.  1Dh    "SQLFRET" retrieve a compiled SQL command
  6375.  1Eh    "SQLFDST" drop a stored command
  6376.  1Fh    "SQLFCTY" get command type
  6377.  20h    "SQLFEPO" get error position
  6378.  21h    "SQLFGNR" get number of rows
  6379.  22h    "SQLFNSI" get number of select items
  6380.  23h    "SQLFRBF" get Roll Back flag
  6381.  24h    "SQLFRCD" get return code
  6382.  25h    "SQLFROW" get number of ROWs
  6383.  26h    "SQLFSCN" set cursor name
  6384.  27h    "SQLFSIL" set isolation level
  6385.  28h    "SQLFSLP" set log parameters
  6386.  29h    "SQLFSSB" set select buffer
  6387.  2Ah    "SQLFSSS" set sort space
  6388.  2Bh    "SQLFRLO" read long
  6389.  2Ch    "SQLFWLO" write long
  6390.  2Dh    "SQLFLSK" long seek
  6391.  2Eh    "SQLFGLS" get long size
  6392.  2Fh    "SQLFELO" end long operation
  6393.  30h    "SQLFRBK" roll back a transaction from the database
  6394.  31h    "SQLFERR" error message
  6395.  32h    "SQLFCPY" copy
  6396.  33h    "SQLFR01" reserved
  6397.  34h    "SQLFSYS" system
  6398.  35h    "SQLFSTA" statistics
  6399.  36h    "SQLFR02" reserved
  6400.  37h    "SQLFXAD" extra add
  6401.  38h    "SQLFXCN" extra character to number
  6402.  39h    "SQLFXDA" extra date add
  6403.  3Ah    "SQLFXDP" extra date picture
  6404.  3Bh    "SQLFXDV" extra divide
  6405.  3Ch    "SQLFXML" extra multiply
  6406.  3Dh    "SQLFXNP" extra number picture
  6407.  3Eh    "SQLFXPD" extra picture date
  6408.  3Fh    "SQLFXSB" extra subtract
  6409.  40h    "SQLFINS" install database
  6410.  41h    "SQLFDIN" deinstall database
  6411.  42h    "SQLFDIR" directory of databases
  6412.  43h    "SQLFTIO" timeout
  6413.  44h    "SQLFFQN" get fully qualified column name
  6414.  45h    "SQLFEXP" explain execution plan
  6415.  46h    "SQLFFER" get full error
  6416.  47h    "SQLFBKP" begin online backup
  6417.  48h    "SQLFRDC" read backup data chunk
  6418.  49h    "SQLFEBK" end backup
  6419.  4Ah    "SQLFRES" begin restore from backup
  6420.  4Bh    "SQLFWDC" write backup data chunk for restore
  6421.  4Ch    "SQLFRRD" recover restored database to consistent state
  6422.  4Dh    "SQLFERS" end restore
  6423.  4Eh    "SQLFNRR" return number of result set rows
  6424.  4Fh    "SQLFSTR" start restriction mode
  6425.  50h    "SQLFSPR" stop restriction mode
  6426.  51h    "SQLFCNC" connect 2
  6427.  52h    "SQLFCNR" connect with no recovery
  6428.  53h    "SQLFOMS" set output message size
  6429.  54h    "SQLFIMS" set input message size
  6430.  55h    "SQLFSCP" set cache pages
  6431.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  6432.  57h    "SQLFLAB" get label info for items in SELECT statement
  6433.  58h    "SQLFCBV" clear bind variables
  6434.  59h    "SQLFGET" get database information
  6435.  5Ah    "SQLFSET" set database information
  6436.  5Bh    "SQLFTEC" translate error code
  6437. ----------478001-----------------------------
  6438. INT 47 - SQL Base - GET VERSION NUMBER
  6439.     AX = 8001h
  6440. Return: ???
  6441. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  6442. ----------48---------------------------------
  6443. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  6444. SeeAlso: INT 49"PCjr"
  6445. ----------48---------------------------------
  6446. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  6447. SeeAlso: INT 47"Z100",INT 49"Z100"
  6448. ----------48---------------------------------
  6449. INT 48 - Watstar PC Network data pointer 1
  6450. SeeAlso: INT 49"Watstar"
  6451. ----------48---------------------------------
  6452. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  6453. Return: FLAGS destroyed
  6454. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  6455. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  6456. ----------49---------------------------------
  6457. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  6458. SeeAlso: INT 48"PCjr"
  6459.  
  6460. Format of translation table:
  6461. Offset    Size    Description
  6462.  00h    BYTE    number of nonkeyboard scancodes in the table
  6463.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  6464.         representing the scancode mapped values relative to their
  6465.         input values within the range of 56h through 7Eh
  6466. ----------49---------------------------------
  6467. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  6468. SeeAlso: INT 48"Z100",INT 4A"Z100"
  6469. ----------49---------------------------------
  6470. INT 49 - Texas Instruments PC - VIDEO I/O???
  6471.     apparently provides direct video display on the TI Professional PC
  6472. ----------49---------------------------------
  6473. INT 49 - Watstar PC Network data pointer 2
  6474. SeeAlso: INT 49"Watstar"
  6475. ----------49---------------------------------
  6476. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  6477.     AL = character to be written
  6478. Return: FLAGS destroyed
  6479. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  6480. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  6481. ----------490001-----------------------------
  6482. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  6483.     AX = 0001h
  6484. Return: AX = status
  6485.         0000h cannot magnify current video mode
  6486.         0002h magnified (text mode)
  6487.         0003h magnified (graphics mode)
  6488.         FFFDh function works only in magnified mode
  6489.         FFFFh MAGic busy, retry later
  6490.     BX,CX,DX destroyed
  6491. Notes:    MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  6492.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  6493.     INT 49 is the default, but may be overridden on the commandline.  The
  6494.       actual interrupt in use may be found by searching for the signature
  6495.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  6496.       the interrupt handler (this is also the installation check).    MAGic
  6497.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  6498.       the interrupt handler's segment, followed by MAGic's TSR ID of
  6499.       "VMAG".
  6500. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0008h
  6501. ----------490002-----------------------------
  6502. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  6503.     AX = 0002h
  6504. Return: AX = status (see AX=0001h)
  6505.     BX,CX,DX destroyed
  6506. SeeAlso: AX=0001h
  6507. ----------490003-----------------------------
  6508. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  6509.     AX = 0003h
  6510.     BX = vertical position (character row [text] or pixel row [graphics])
  6511.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  6512. Return: AX = status
  6513.         0000h successful
  6514.         FFFFh MAGic busy, retry later
  6515.     BX,CX,DX destroyed
  6516. Note:    window is not moved if the position is inside the current window
  6517. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  6518. ----------490004-----------------------------
  6519. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  6520.     AX = 0004h
  6521.     BX = vertical position of upper left corner
  6522.     DX = horizontal position
  6523. Return: AX = status (see AX=0003h)
  6524.     BX,CX,DX destroyed
  6525. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  6526. ----------490005-----------------------------
  6527. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  6528.     AX = 0005h
  6529. Return: AX = status
  6530.         0000h successful
  6531.         BX = vertical position (char row or pixel row)
  6532.         DX = horizontal position (char column or 8-pixel units)
  6533.         FFFFh MAGic busy, retry later
  6534.         BX,DX destroyed
  6535.     CX destroyed
  6536. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  6537. ----------490006-----------------------------
  6538. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  6539.     AX = 0006h
  6540. Return: AX = status
  6541.         0000h successful
  6542.         BX = vertical size (char rows or pixel rows)
  6543.         DX = horizontal size (char cols or 8-pixel units)
  6544.         FFFFh MAGic busy, retry later
  6545.         BX,DX destroyed
  6546.     CX destroyed
  6547. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  6548. ----------490007-----------------------------
  6549. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  6550.     AX = 0007h
  6551. Return: AX = status
  6552.         0000h successful
  6553.         BX = vertical size (char rows or pixel rows)
  6554.         DX = horizontal size (char cols or 8-pixel units)
  6555.         FFFEh invalid function
  6556.         FFFFh MAGic busy, retry later
  6557.         BX,DX destroyed
  6558.     CX destroyed
  6559. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  6560.       AX=0000h is accepted and will branch into hyperspace
  6561. SeeAlso: AX=0001h,AX=0006h
  6562. ----------490008-----------------------------
  6563. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  6564.     AX = 0008h
  6565.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  6566. Return: AX = status
  6567.         0000h successful
  6568.         FFFBh scaling factor only available in MAGic Deluxe
  6569.         FFFCh already in magnified state, can't set size
  6570. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  6571.       magnify the display
  6572.     scaling factors greater than 2 are only available in MAGic Deluxe
  6573. SeeAlso: AX=0001h
  6574. ----------4A---------------------------------
  6575. INT 4A C - SYSTEM - USER ALARM HANDLER
  6576. Desc:    This interrupt is invoked by the BIOS when a real-time clock alarm
  6577.       occurs; an application may use it to perform an action at a
  6578.       predetermined time.
  6579. Note:    this interrupt is called from within a hardware interrupt handler,
  6580.       so all usual precautions against reentering DOS must be taken
  6581. SeeAlso: INT 1A/AH=06h
  6582. ----------4A---------------------------------
  6583. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  6584. SeeAlso: INT 49"Z100",INT 4B"Z100"
  6585. ----------4A---------------------------------
  6586. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  6587.     AL = function code
  6588.         FAh transfer data between 80186 and 65C12 I/O processor
  6589.     DS:BX -> control block (see below)
  6590. Return: FLAGS destroyed
  6591.     control block updated
  6592. Note:    there are more functions than are listed here, but details are not
  6593.       available
  6594. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  6595.  
  6596. Format of control block for function FAh:
  6597. Offset    Size    Description
  6598.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  6599.  01h    BYTE    number of parameters read from I/O processor (01h)
  6600.  02h    DWORD    I/O processor address
  6601.  06h    DWORD    80186 segment:offset address
  6602.  0Ah    WORD    number of bytes to transfer
  6603.  0Ch    BYTE    operation type
  6604.         00h write to 65C12 at 24 us/byte
  6605.         01h read from 65C12 at 24 us/byte
  6606.         02h write to 65C12 at 26 us/word
  6607.         03h read from 65C12 at 26 us/word
  6608.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  6609.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  6610.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  6611.         bit 7: unused
  6612.         bit 6: always use main screen memory if I/O addr 3000h-7FFFh
  6613.             (overrides bit 5)
  6614.         bit 5: use shadow screen memory if screen address specified
  6615.         bit 4: use current ROM rather than ROM selected by bits 3-0
  6616.             (only if I/O address between 8000h and BFFFh)
  6617.         bits 3-0: paged ROM number
  6618. ----------4B---------------------------------
  6619. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  6620. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  6621. ----------4B---------------------------------
  6622. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  6623.     ES:DI -> CAM Control Block (see INT 4F/AX=8100h)
  6624. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  6625.       to avoid conflicting with the IBM SCSI interface and the Virtual
  6626.       DMA specification
  6627.     the installation check for the driver is the string "SCSI_CAM" eight
  6628.       bytes past the INT 4Bh handler
  6629.     it is not known whether any drivers actually implemented this
  6630.       interface on INT 4B instead of INT 4F
  6631. SeeAlso: INT 4F/AX=8100h
  6632. ----------4B---------------------------------
  6633. INT 4B - Acorn BBC Master 512 - "OSBYTE" - MISC FUNCTIONS USING REGISTER PARAMS
  6634.     AL = function code
  6635.     BL = first parameter
  6636.     BH = second parameter (if needed)
  6637. Return: BL = first return parameter
  6638.     BH = second return parameter
  6639.     CF depends on function
  6640. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4C"Acorn"
  6641. ----------4B80-------------------------------
  6642. INT 4B - IBM SCSI interface
  6643.     AH = 80h
  6644.     details not yet available
  6645. ----------4B8102DX0000-----------------------
  6646. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  6647.     AX = 8102h
  6648.     DX = 0000h
  6649. Return: CF clear if successful
  6650.         AH = major version number
  6651.         AL = minor version number
  6652.         BX = product number
  6653.         0000h for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  6654.         0001h for Microsoft's EMM386.EXE
  6655.         4560h ("E`") for Qualitas' 386MAX
  6656.         4D43h ("MC") for V Communication's Memory Commander
  6657.         5145h ("QE") for Quarterdeck's QEMM-386
  6658.         CX = product revision number
  6659.         always 0000h for QMAPS and HPMM.SYS
  6660.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  6661.         SI:DI = maximum DMA buffer size
  6662.         DX = flags
  6663.         bit 0: PC/XT bus (DMA in first megabyte only)
  6664.             1: physical buffer/remap region in first megabyte
  6665.             2: automatic remap enabled
  6666.             3: all memory is physically contiguous
  6667.          4-15: reserved (zero)
  6668.     CF set on error
  6669.         AL = error code (see below)
  6670. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  6671.       apparently not always the case
  6672. SeeAlso: INT 31
  6673.  
  6674. Values for error code:
  6675.  01h    region not in contiguous memory
  6676.  02h    region crossed a physical alignment boundary
  6677.  03h    unable to lock pages
  6678.  04h    no buffer available
  6679.  05h    region too large for buffer
  6680.  06h    buffer currently in use
  6681.  07h    invalid memory region
  6682.  08h    region was not locked
  6683.  09h    number of physical pages greater than table length
  6684.  0Ah    invalid buffer ID
  6685.  0Bh    copy out of buffer range
  6686.  0Ch    invalid DMA channel number
  6687.  0Dh    disable count overflow
  6688.  0Eh    disable count underflow
  6689.  0Fh    function not supported
  6690.  10h    reserved flag bits set in DX
  6691.  
  6692. Format of DMA descriptor structure (DDS):
  6693. Offset    Size    Description
  6694.  00h    DWORD    region size
  6695.  04h    DWORD    offset
  6696.  08h    WORD    segment/selector
  6697.  0Ah    WORD    buffer ID
  6698.  0Ch    DWORD    physical address
  6699.  
  6700. Format of Extended DMA descriptor structure (EDDS):
  6701. Offset    Size    Description
  6702.  00h    DWORD    region size
  6703.  04h    DWORD    offset
  6704.  08h    WORD    segment/selector
  6705.  0Ah    WORD    reserved
  6706.  0Ch    WORD    number available
  6707.  0Eh    WORD    number used
  6708.  10h    DWORD    region 0 physical address
  6709.  14h    DWORD    region 0 size in bytes
  6710.  18h    DWORD    region 1 physical address
  6711.  1Ch    DWORD    region 1 size in bytes
  6712.     ...
  6713.  
  6714. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  6715. Offset    Size    Description
  6716.  00h    DWORD    region size
  6717.  04h    DWORD    offset
  6718.  08h    WORD    segment/selector
  6719.  0Ah    WORD    reserved
  6720.  0Ch    WORD    number available
  6721.  0Eh    WORD    number used
  6722.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  6723.  14h    DWORD    page table entry 1
  6724.     ...
  6725. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  6726.       is present and locked
  6727. ----------4B8103-----------------------------
  6728. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  6729.     AX = 8103h
  6730.     DX = flags
  6731.         bit 0: reserved (zero)
  6732.         1: data should be copied into buffer (ignored if bit 2 set)
  6733.         2: buffer should not be allocated if region noncontiguous or
  6734.            crosses physical alignment boundary specified by bits 4-5
  6735.         3: don't attempt automatic remap
  6736.         4: region must not cross 64K physical alignment boundary
  6737.         5: region must not cross 128K physical alignment boundary
  6738.          6-15: reserved (zero)
  6739.     ES:DI -> DMA descriptor structure (see AX=8102h)
  6740. Return:    CF clear if successful
  6741.         DDS physical address field filled in
  6742.         DDS buffer ID field filled (0000h if no buffer allocated)
  6743.     CF set on error
  6744.         AL = error code (see AX=8102h)
  6745.         DDS region size field filled wth maximum contiguous length in bytes
  6746. SeeAlso: AX=8104h,AX=8105h
  6747. ----------4B8104-----------------------------
  6748. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  6749.     AX = 8104h
  6750.     DX = flags
  6751.         bit 0: reserved (zero)
  6752.         1: data should be copied out of buffer
  6753.          2-15: reserved (zero)
  6754.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size,
  6755.         physical address, and buffer ID fields set
  6756. Return: CF clear if successful
  6757.         DDS physical address field set
  6758.         DDS buffer ID field set (0000h if no buffer allocated)
  6759.     CF set on error
  6760.         AL = error code (see AX=8102h)
  6761.         DDS region size field filled wth maximum contiguous length in bytes
  6762. SeeAlso: AX=8103h,AX=8106h
  6763. ----------4B8105-----------------------------
  6764. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  6765.     AX = 8105h
  6766.     DX = flags
  6767.         bits 0-5: reserved (zero)
  6768.            6: EDDS should be returned with page table entries
  6769.            7: only present pages should be locked (not-present pages
  6770.             receive entry of 0000h)
  6771.         8-15: reserved (zero)
  6772.     ES:DI -> Extended DMA descriptor structure (see AX=8102h)
  6773.         region size, linear segment, linear offset, and number avail
  6774.         fields set
  6775. Return: CF clear if successful
  6776.         EDDS number used field set
  6777.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  6778.     CF set on error
  6779.         AL = error code (see AX=8102h)
  6780.         EDDS region size field filled with max length in bytes that can be
  6781.         locked and described in the EDDS table
  6782. SeeAlso: AX=8103h,AX=8106h
  6783. ----------4B8106-----------------------------
  6784. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  6785.     AX = 8106h
  6786.     DX = flags
  6787.         bits 0-5: reserved (zero)
  6788.            6: EDDS contains page table entries
  6789.            7: EDDS may contain not-present pages (entry = 0000h)
  6790.         8-15: reserved (zero)
  6791.     ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned
  6792.         by AX=8105h    
  6793. Return: CF clear if successful
  6794.     CF set on error
  6795.         AL = error code (see AX=8102h)
  6796. Note:    according to the Microsoft version of the VDS specification, the
  6797.       actual scatter/gather list is ignored, while according to the IBM
  6798.       version of the specification, "the result of a LOCK operation"
  6799.       must be provided to this function
  6800. SeeAlso: AX=8104h,AX=8105h
  6801. ----------4B8107-----------------------------
  6802. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  6803.     AX = 8107h
  6804.     DX = flags
  6805.         bit 0: reserved (zero)
  6806.         1: data should be copied into buffer
  6807.          2-15: reserved (zero)
  6808.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size set
  6809.         (also region offset and region segment if DX bit 1 set)
  6810. Return: CF clear if successful
  6811.         DDS physical address and buffer ID set
  6812.         DDS region size filled with length of buffer
  6813.     CF set on error
  6814.         AL = error code (see AX=8102h)
  6815. SeeAlso: AX=8108h
  6816. ----------4B8108-----------------------------
  6817. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  6818.     AX = 8108h
  6819.     DX = flags
  6820.         bit 0: reserved (zero)
  6821.         1: data should be copied out of buffer
  6822.          2-15: reserved (zero)
  6823.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set
  6824.         (also region size/region offset/segment if DX bit 1 set)
  6825. Return: CF clear if successful
  6826.     CF set on error
  6827.         AL = error code (see AX=8102h)
  6828. SeeAlso: AX=8107h
  6829. ----------4B8109DX0000-----------------------
  6830. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  6831.     AX = 8109h
  6832.     DX = 0000h
  6833.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  6834.         region segment/offset, and region size fields set
  6835.     BX:CX = starting offset into DMA buffer
  6836. Return: CF clear if successful
  6837.     CF set on error
  6838.         AL = error code (see AX=8102h)
  6839. SeeAlso: AX=810Ah
  6840. ----------4B810ADX0000-----------------------
  6841. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  6842.     AX = 810Ah
  6843.     DX = 0000h
  6844.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  6845.         region segment/offset, and region size fields set
  6846.     BX:CX = starting offset into DMA buffer
  6847. Return: CF clear if successful
  6848.     CF set on error
  6849.         AL = error code (see AX=8102h)
  6850. SeeAlso: AX=8109h
  6851. ----------4B810B-----------------------------
  6852. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  6853.     AX = 810Bh
  6854.     BX = DMA channel number
  6855.     DX = 0000h
  6856. Return: CF clear if successful
  6857.     CF set on error
  6858.         AL = error code (see AX=8102h)
  6859. SeeAlso: AX=810Ch
  6860. ----------4B810C-----------------------------
  6861. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  6862.     AX = 810Ch
  6863.     BX = DMA channel number
  6864.     DX = 0000h
  6865. Return: CF clear if successful
  6866.         ZF set if disable count decremented to zero
  6867.     CF set on error
  6868.         AL = error code (see AX=8102h)
  6869. SeeAlso: AX=810Bh
  6870. ----------4B810D-----------------------------
  6871. INT 4B - QEMM-386 - BUG
  6872.     AX = 810Dh
  6873. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  6874.       call
  6875. ----------4C---------------------------------
  6876. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  6877. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  6878. ----------4C---------------------------------
  6879. INT 4C - Acorn BBC Master 512 - "OSCLI" - INTERPRET COMMAND LINE
  6880.     DS:BX -> CR-terminated command string
  6881. Return: FLAGS destroyed
  6882. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4B"Acorn"
  6883. ----------4D---------------------------------
  6884. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  6885. SeeAlso: INT 4C"Z100",INT 4E"Z100"
  6886. ----------4E---------------------------------
  6887. INT 4E - TI Professional PC - DISK I/O
  6888.     used instead of INT 13 on the TI Professional PC
  6889. SeeAlso: INT 13
  6890. ----------4E---------------------------------
  6891. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  6892. SeeAlso: INT 4D"Z100",INT 4F"Z100"
  6893. ----------4F---------------------------------
  6894. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  6895. SeeAlso: INT 4E"Z100"
  6896. ----------4F8100-----------------------------
  6897. INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM
  6898.     AX = 8100h
  6899.     ES:BX -> CAM Control Block (CCB) (see below)
  6900. Return: AH = status
  6901.         00h successful
  6902.         01h invalid CCB address (0000h:0000h)
  6903. Note:    the SCSI Interface Module (SIM) may complete the requested function
  6904.       and invoke the completion callback function before this call returns
  6905. SeeAlso: AX=8200h,INT 4B"Common Access Method"
  6906.  
  6907. Format of CAM Control Block:
  6908. Offset    Size    Description
  6909.  00h    DWORD    physical address of this CCB
  6910.  04h    WORD    CAM control block length
  6911.  06h    BYTE    function code (see below)
  6912.  07h    BYTE    CAM status (see below)
  6913.  08h    BYTE    SCSI status
  6914.  09h    BYTE    path ID (FFh = XPT)
  6915.  0Ah    BYTE    target ID
  6916.  0Bh    BYTE    logical unit number
  6917.  0Ch    BYTE    CAM flags
  6918.         bits 7-6: direction
  6919.             00 reserved
  6920.             01 in
  6921.             10 out
  6922.             11 no data transfer
  6923.         bit 5: disable autosense
  6924.             4: scatter/gather
  6925.             3: disable callback on completion
  6926.             2: linked CDB
  6927.             1: tagged queue action enable
  6928.             0: CDB is a pointer
  6929.  0Dh    BYTE    CAM flags
  6930.         bit 7: disable disconnect
  6931.             6: initiate synchronous transfers  \ mutually
  6932.             5: disable synchronous transfers   / exclusive
  6933.             4: SIM queue priority
  6934.             1 head insertion
  6935.             0 tail insertion (normal)
  6936.         bit 3: SIM queue freeze
  6937.             2: engine synchronize
  6938.         bits 1-0: reserved
  6939.  0Eh    BYTE    CAM address flags
  6940.         bit 7: SG list/data (0 = host, 1 = engine)
  6941.         bit 6: CDB pointer    (bits 6-1: 0=virtual addr, 1=phys addr)
  6942.         bit 5: SG list/data
  6943.         bit 4: sense buffer
  6944.         bit 3: message buffer
  6945.         bit 2: next CCB
  6946.         bit 1: callback on completion
  6947.         bit 0: reserved
  6948.  0Fh    BYTE    target-mode flags
  6949.         bit 7: data buffer valid
  6950.         bit 6: status valid
  6951.         bit 5: message buffer valid
  6952.         bit 4: reserved
  6953.         bit 3: phase-cognizant mode
  6954.         bit 2: target CCB available
  6955.         bit 1: disable autodisconnect
  6956.         bit 0: disable autosave/restore
  6957. ---function 02h---
  6958.  10h    DWORD    pointer to 36-byte buffer for inquiry data or 0000h:0000h
  6959.  14h    BYTE    peripheral device type of target logical unit number
  6960. ---function 03h---
  6961.  10h    BYTE    version number (00h-07h prior to rev 1.7, 08h = rev 1.7,
  6962.         09h-FFh = rev no, i.e. 23h = rev 2.3)
  6963.  11h    BYTE    SCSI capabilities
  6964.         bit 7: modify data pointers
  6965.             6: wide bus (32 bits)
  6966.             5: wide bus (16 bits)
  6967.             4: synchronous transfers
  6968.             3: linked commands
  6969.             2: reserved
  6970.             1: tagged queueing
  6971.             0: soft reset
  6972.  12h    BYTE    target mode support
  6973.         bit 7: processor mode
  6974.             6: phase-cognizant mode
  6975.             5-0: reserved
  6976.  13h    BYTE    miscellaneous flags
  6977.         bit 7: scanned high to low instead of low to high
  6978.             6: removables not included in scan
  6979.             5: inquiry data not kept by XPT
  6980.             4-0: reserved
  6981.  14h    WORD    engine count
  6982.  16h 14 BYTEs    vendor-specific data
  6983.  24h    DWORD    size of private data area
  6984.  28h    DWORD    asynchronous event capabilities
  6985.         bits 31-24: vendor-specific
  6986.              23-8: reserved
  6987.             7: new devices found during rescan
  6988.             6: SIM module deregistered
  6989.             5: SIM module registered
  6990.             4: sent bus device reset to target
  6991.             3: SCSI AEN
  6992.             2: reserved
  6993.             1: unsolicited reselection
  6994.             0: unsolicited SCSI bus reset
  6995.  2Ch    BYTE    highest path ID assigned
  6996.  2Dh    BYTE    SCSI device ID of initiator
  6997.  2Eh  2 BYTEs    reserved
  6998.  30h 16 BYTEs    SIM vendor ID
  6999.  40h 16 BYTEs    HBA (host bus adaptor) vendor ID
  7000.  50h  4 BYTEs    operating-system dependant usage
  7001. ---functions 00h,04h,11h,12h---
  7002.  no additional fields
  7003. ---function 05h---
  7004.  10h    DWORD    asynchronous event enables (see function 03h above)
  7005.  14h    DWORD    pointer to asynchronous callback routine
  7006.  18h    DWORD    pointer to peripheral driver buffer
  7007.  1Ch    BYTE    size of peripheral buffer
  7008. ---function 06h---
  7009.  10h    BYTE    peripheral device type of target
  7010. ---functions 10h,13h---
  7011.  10h    DWORD    pointer to CCB to be aborted
  7012. ---function 20h---
  7013.  10h    WORD    engine number
  7014.  12h    BYTE    engine type
  7015.         00h buffer memory
  7016.         01h lossless compression
  7017.         02h lossy compression
  7018.         03h encryption
  7019.  13h    BYTE    engine algorithm ID
  7020.         00h vendor-unique
  7021.         01h LZ1 variation 1 (STAC)
  7022.         02h LZ2 variation 1 (HP DCZL)
  7023.         03h LZ2 variation 2 (Infochip)
  7024.  14h    DWORD    engine memory size
  7025. ---function 21h---
  7026.  10h    DWORD    pointer to peripheral driver
  7027.  14h  4 BYTEs    reserved
  7028.  18h    DWORD    OS-dependent request-mapping info
  7029.  1Ch    DWORD    address of completion callback routine
  7030.  20h    DWORD    pointer to scatter/gather list or data buffer
  7031.  24h    DWORD    length of data transfer
  7032.  28h    DWORD    pointer to engine buffer data
  7033.  2Ch  2 BYTEs    reserved
  7034.  2Eh    WORD    number of scatter/gather entries
  7035.  30h    DWORD    maximum destination data length
  7036.  34h    DWORD    length of destination data
  7037.  38h    DWORD    source residual length
  7038.  3Ch 12 BYTEs    reserved
  7039.  48h    DWORD    OS-dependent timeout value
  7040.  4Ch  4 BYTEs    reserved
  7041.  50h    WORD    engine number
  7042.  52h    WORD    vendor-unique flags
  7043.  54h  4 BYTEs    reserved
  7044.  58h  N BYTEs    private data area for SIM
  7045. ---function 30h---
  7046.  10h    WORD    group 6 vendor-unique CDB length
  7047.  12h    WORD    group 7 vendor-unique CDB length
  7048.  14h    DWORD    pointer to target CCB list
  7049.  18h    WORD    number of target CCBs
  7050. ---other functions---
  7051.  10h    DWORD    pointer to peripheral driver
  7052.  14h    DWORD    pointer to next CCB
  7053.  18h    DWORD    OS-dependent request mapping information
  7054.  1Ch    DWORD    address of completion callback routine
  7055.  20h    DWORD    pointer to scatter/gather list or data buffer
  7056.  24h    DWORD    length of data transfer
  7057.  28h    DWORD    pointer to sense info buffer
  7058.  2Ch    BYTE    length of sense info buffer
  7059.  2Dh    BYTE    CDB length
  7060.  2Eh    WORD    number of scatter/gather entries
  7061.  30h  4 BYTEs    reserved
  7062.  34h    BYTE    SCSI status
  7063.  35h  3 BYTEs    reserved
  7064.  38h    DWORD    residual length
  7065.  40h 12 BYTEs    Command Descriptor Block (CDB)
  7066.  44h    DWORD    OS-dependent timeout value
  7067.  48h    DWORD    pointer to message buffer
  7068.  4Ch    WORD    length of message buffer
  7069.  4Eh    WORD    vendor-unique flags
  7070.  50h    BYTE    tag queue action
  7071.  51h  3 BYTEs    reserved
  7072.  54h  N BYTEs    private data area for SIM
  7073.  
  7074. Values for CAM function code:
  7075.  00h NOP
  7076.  01h execute SCSI I/O
  7077.  02h get device type
  7078.  03h path inquiry
  7079.  04h release SIM queue
  7080.  05h set async callback
  7081.  06h set device type
  7082.  07h-0Fh reserved
  7083.  10h abort SCSI command
  7084.  11h reset SCSI bus
  7085.  12h reset SCSI device
  7086.  13h terminate I/O process
  7087.  14h-1Fh reserved
  7088.  20h engine inquiry
  7089.  21h execute engine request
  7090.  22h-2Fh reserved
  7091.  30h enable logical unit number
  7092.  31h execute target I/O
  7093.  32h-7Fh reserved
  7094.  80h-FFh vendor-specific functions
  7095.  
  7096. Values for CAM status:
  7097.  00h request in progress
  7098.  01h request successful
  7099.  02h host aborted request
  7100.  03h unable to abort request
  7101.  04h request completed with error
  7102.  05h CAM is busy
  7103.  06h invalid request
  7104.  07h invalid path ID
  7105.  08h no such SCSI device
  7106.  09h unable to terminate I/O process
  7107.  0Ah timeout on target selection
  7108.  0Bh timeout on command
  7109.  0Dh receive message rejection
  7110.  0Eh sent/received SCSI bus reset
  7111.  0Fh detected uncorrectable parity error
  7112.  10h Autosense request failed
  7113.  11h no HBA detected
  7114.  12h data over/underrun
  7115.  13h bus freed unexpectedly
  7116.  14h target bus phase sequence failure
  7117.  15h CCB too small
  7118.  16h requested capability not available
  7119.  17h sent bus device reset
  7120.  18h terminate I/O process
  7121.  38h invalid LUN
  7122.  39h invalid target ID
  7123.  3Ah unimplemented function
  7124.  3Bh nexus not established
  7125.  3Ch invalid initiator ID
  7126.  3Dh received SCSI Command Descriptor Block
  7127.  3Eh LUN already enabled
  7128.  3Fh SCSI bus busy
  7129. Note:    bit 6 set to indicate frozen SIM queue
  7130.     bit 7 set to indicate valid autosense
  7131.  
  7132. Completion callback function called with:
  7133.     interrupts disabled
  7134.     ES:BX -> completed CCB
  7135.  
  7136. Asynchronous callback function called with:
  7137.     AH = opcode
  7138.     AL = path ID generating callback
  7139.     DH = target ID causing event
  7140.     DL = LUN causing event
  7141.     CX = data byte count (if applicable)
  7142.     ES:BX -> data buffer (if applicable)
  7143. Return: all registers preserved
  7144. ----------4F8200CX8765-----------------------
  7145. INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK
  7146.     AX = 8200h
  7147.     CX = 8765h
  7148.     DX = CBA9h
  7149. Return: AH = 00h if installed
  7150.         CX = 9ABCh
  7151.         DX = 5678h
  7152.         ES:DI -> "SCSI_CAM"
  7153. SeeAlso: AX=8100h,INT 4B"Common Access Method"
  7154. ---------------------------------------------
  7155.